www.mooseframework.org
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | Friends | List of all members
RankThreeTensor Class Reference

RankThreeTensor is designed to handle any N-dimensional third order tensor, r. More...

#include <RankThreeTensor.h>

Public Types

enum  InitMethod { initNone }
 Initialization method. More...
 
enum  FillMethod { general }
 To fill up the 27 entries in the 3rd-order tensor, fillFromInputVector is called with one of the following fill_methods. More...
 

Public Member Functions

 RankThreeTensor ()
 Default constructor; fills to zero. More...
 
 RankThreeTensor (const InitMethod)
 Select specific initialization pattern. More...
 
 RankThreeTensor (const std::vector< Real > &, FillMethod)
 Fill from vector. More...
 
Real & operator() (unsigned int i, unsigned int j, unsigned int k)
 Gets the value for the index specified. Takes index = 0,1,2. More...
 
Real operator() (unsigned int i, unsigned int j, unsigned int k) const
 Gets the value for the index specified. Takes index = 0,1,2. Used for const. More...
 
void zero ()
 Zeros out the tensor. More...
 
void print (std::ostream &stm=Moose::out) const
 Print the rank three tensor. More...
 
RankThreeTensoroperator= (const RankThreeTensor &a)
 copies values from a into this tensor More...
 
RealVectorValue operator* (const RankTwoTensor &a) const
 r_ijk*a_kl More...
 
RankThreeTensor operator* (const Real a) const
 r_ijk*a More...
 
RankThreeTensoroperator*= (const Real a)
 r_ijk *= a More...
 
RankThreeTensor operator/ (const Real a) const
 r_ijk/a More...
 
RankThreeTensoroperator/= (const Real a)
 r_ijk /= a for all i, j, k More...
 
RankThreeTensoroperator+= (const RankThreeTensor &a)
 r_ijk += a_ijk for all i, j, k More...
 
RankThreeTensor operator+ (const RankThreeTensor &a) const
 r_ijkl + a_ijk More...
 
RankThreeTensoroperator-= (const RankThreeTensor &a)
 r_ijk -= a_ijk More...
 
RankThreeTensor operator- (const RankThreeTensor &a) const
 r_ijk - a_ijk More...
 
RankThreeTensor operator- () const
 -r_ijk More...
 
Real L2norm () const
 (r_ijk*r_ijk) More...
 
template<class T >
void rotate (const T &R)
 Rotate the tensor using r_ijk = R_im R_in R_ko r_mno. More...
 
void rotate (const RealTensorValue &R)
 Rotate the tensor using r_ijk = R_im R_in R_ko r_mno. More...
 
void fillFromInputVector (const std::vector< Real > &input, FillMethod fill_method)
 fillFromInputVector takes some number of inputs to fill the Rank-3 tensor. More...
 
void fillFromPlaneNormal (const RealVectorValue &input)
 Fills RankThreeTensor from plane normal vectors ref. More...
 
RankFourTensor mixedProductRankFour (const RankTwoTensor &a) const
 Creates fourth order tensor D=A*b*A where A is rank 3 and b is rank 2. More...
 
RealVectorValue doubleContraction (const RankTwoTensor &b) const
 Creates a vector from the double contraction of a rank three and rank two tensor. More...
 

Static Public Member Functions

static MooseEnum fillMethodEnum ()
 Static method for use in validParams for getting the "fill_method". More...
 

Protected Member Functions

void fillGeneralFromInputVector (const std::vector< Real > &input)
 

Protected Attributes

Real _vals [N3]
 The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) More...
 

Static Protected Attributes

static constexpr unsigned int N = LIBMESH_DIM
 Dimensionality of rank-three tensor. More...
 
static constexpr unsigned int N2 = N * N
 
static constexpr unsigned int N3 = N * N * N
 

Friends

template<class T >
void dataStore (std::ostream &, T &, void *)
 
template<class T >
void dataLoad (std::istream &, T &, void *)
 

Detailed Description

RankThreeTensor is designed to handle any N-dimensional third order tensor, r.

Definition at line 40 of file RankThreeTensor.h.

Member Enumeration Documentation

◆ FillMethod

To fill up the 27 entries in the 3rd-order tensor, fillFromInputVector is called with one of the following fill_methods.

See the fill*FromInputVector functions for more details

Enumerator
general 

Definition at line 54 of file RankThreeTensor.h.

55  {
56  general
57  };

◆ InitMethod

Initialization method.

Enumerator
initNone 

Definition at line 44 of file RankThreeTensor.h.

Constructor & Destructor Documentation

◆ RankThreeTensor() [1/3]

RankThreeTensor::RankThreeTensor ( )

Default constructor; fills to zero.

Definition at line 55 of file RankThreeTensor.C.

56 {
57  mooseAssert(N == 3, "RankThreeTensor is currently only tested for 3 dimensions.");
58 
59  for (unsigned int i = 0; i < N3; ++i)
60  _vals[i] = 0;
61 }
static constexpr unsigned int N
Dimensionality of rank-three tensor.
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
static constexpr unsigned int N3

◆ RankThreeTensor() [2/3]

RankThreeTensor::RankThreeTensor ( const InitMethod  init)

Select specific initialization pattern.

Definition at line 63 of file RankThreeTensor.C.

64 {
65  switch (init)
66  {
67  case initNone:
68  break;
69 
70  default:
71  mooseError("Unknown RankThreeTensor initialization pattern.");
72  }
73 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208

◆ RankThreeTensor() [3/3]

RankThreeTensor::RankThreeTensor ( const std::vector< Real > &  input,
FillMethod  fill_method 
)

Fill from vector.

Definition at line 75 of file RankThreeTensor.C.

76 {
77  fillFromInputVector(input, fill_method);
78 }
void fillFromInputVector(const std::vector< Real > &input, FillMethod fill_method)
fillFromInputVector takes some number of inputs to fill the Rank-3 tensor.

Member Function Documentation

◆ doubleContraction()

RealVectorValue RankThreeTensor::doubleContraction ( const RankTwoTensor b) const

Creates a vector from the double contraction of a rank three and rank two tensor.

Definition at line 324 of file RankThreeTensor.C.

325 {
326  RealVectorValue result;
327 
328  for (unsigned int i = 0; i < N; ++i)
329  for (unsigned int j = 0; j < N2; ++j)
330  result(i) += _vals[i * N2 + j] * b._coords[j];
331 
332  return result;
333 }
static constexpr unsigned int N2
static constexpr unsigned int N
Dimensionality of rank-three tensor.
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...

◆ fillFromInputVector()

void RankThreeTensor::fillFromInputVector ( const std::vector< Real > &  input,
FillMethod  fill_method 
)

fillFromInputVector takes some number of inputs to fill the Rank-3 tensor.

Parameters
inputthe numbers that will be placed in the tensor
fill_methodthis can be: general (use fillGeneralFromInputVector) more fill_methods to be implemented soon!

Definition at line 215 of file RankThreeTensor.C.

Referenced by RankThreeTensor().

216 {
217  zero();
218 
219  switch (fill_method)
220  {
221  case general:
223  break;
224  default:
225  mooseError("fillFromInputVector called with unknown fill_method of ", fill_method);
226  }
227 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
void fillGeneralFromInputVector(const std::vector< Real > &input)
void zero()
Zeros out the tensor.

◆ fillFromPlaneNormal()

void RankThreeTensor::fillFromPlaneNormal ( const RealVectorValue &  input)

Fills RankThreeTensor from plane normal vectors ref.

Kuhl et. al. Int. J. Solids Struct. 38(2001) 2933-2952

Parameters
inputplane normal vector

Definition at line 230 of file RankThreeTensor.C.

231 {
232  unsigned int index = 0;
233  for (unsigned int i = 0; i < N; ++i)
234  {
235  const Real a = input(i);
236  for (unsigned int j = 0; j < N; ++j)
237  {
238  const Real b = input(j);
239  for (unsigned int k = 0; k < N; ++k)
240  {
241  const Real c = input(k);
242  Real sum = 0;
243  sum = -2 * a * b * c;
244  if (i == j)
245  sum += c;
246  if (i == k)
247  sum += b;
248  _vals[index++] = sum / 2.0;
249  }
250  }
251  }
252 }
static constexpr unsigned int N
Dimensionality of rank-three tensor.
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...

◆ fillGeneralFromInputVector()

void RankThreeTensor::fillGeneralFromInputVector ( const std::vector< Real > &  input)
protected

Definition at line 301 of file RankThreeTensor.C.

Referenced by fillFromInputVector().

302 {
303  if (input.size() != 27)
304  mooseError("To use fillGeneralFromInputVector, your input must have size 27. Yours has size ",
305  input.size());
306 
307  for (unsigned int i = 0; i < N3; ++i)
308  _vals[i] = input[i];
309 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
static constexpr unsigned int N3

◆ fillMethodEnum()

MooseEnum RankThreeTensor::fillMethodEnum ( )
static

Static method for use in validParams for getting the "fill_method".

Definition at line 49 of file RankThreeTensor.C.

51 {
52  return MooseEnum("general");
53 }
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
Definition: MooseEnum.h:32

◆ L2norm()

Real RankThreeTensor::L2norm ( ) const

(r_ijk*r_ijk)

Definition at line 204 of file RankThreeTensor.C.

205 {
206  Real l2 = 0;
207 
208  for (unsigned int i = 0; i < N3; ++i)
209  l2 += Utility::pow<2>(_vals[i]);
210 
211  return std::sqrt(l2);
212 }
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
static constexpr unsigned int N3

◆ mixedProductRankFour()

RankFourTensor RankThreeTensor::mixedProductRankFour ( const RankTwoTensor a) const

Creates fourth order tensor D=A*b*A where A is rank 3 and b is rank 2.

Parameters
aRankTwoTensor A in the equation above

Definition at line 255 of file RankThreeTensor.C.

256 {
257  RankFourTensor result;
258 
259  unsigned int index = 0;
260  for (unsigned int i = 0; i < N; ++i)
261  for (unsigned int j = 0; j < N; ++j)
262  for (unsigned int k = 0; k < N; ++k)
263  for (unsigned int l = 0; l < N; ++l)
264  {
265  for (unsigned int m = 0; m < N; ++m)
266  for (unsigned int n = 0; n < N; ++n)
267  result._vals[index] += (*this)(m, i, j) * a._coords[m * N + n] * (*this)(n, k, l);
268  index++;
269  }
270 
271  return result;
272 }
static constexpr unsigned int N
Dimensionality of rank-three tensor.
PetscInt m
Real _vals[N4]
The values of the rank-four tensor stored by index=(((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) * LIBME...
PetscInt n
RankFourTensor is designed to handle any N-dimensional fourth order tensor, C.

◆ operator()() [1/2]

Real& RankThreeTensor::operator() ( unsigned int  i,
unsigned int  j,
unsigned int  k 
)
inline

Gets the value for the index specified. Takes index = 0,1,2.

Definition at line 69 of file RankThreeTensor.h.

70  {
71  return _vals[((i * N + j) * N + k)];
72  }
static constexpr unsigned int N
Dimensionality of rank-three tensor.
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...

◆ operator()() [2/2]

Real RankThreeTensor::operator() ( unsigned int  i,
unsigned int  j,
unsigned int  k 
) const
inline

Gets the value for the index specified. Takes index = 0,1,2. Used for const.

Definition at line 75 of file RankThreeTensor.h.

76  {
77  return _vals[((i * N + j) * N + k)];
78  }
static constexpr unsigned int N
Dimensionality of rank-three tensor.
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...

◆ operator*() [1/2]

RealVectorValue RankThreeTensor::operator* ( const RankTwoTensor a) const

r_ijk*a_kl

b_i = r_ijk * a_jk

Definition at line 96 of file RankThreeTensor.C.

97 {
98  RealVectorValue result;
99 
100  for (unsigned int i = 0; i < N; ++i)
101  {
102  Real sum = 0;
103  unsigned int i1 = i * N2;
104  for (unsigned int j1 = 0; j1 < N2; j1 += N)
105  for (unsigned int k = 0; k < N; ++k)
106  sum += _vals[i1 + j1 + k] * a._coords[j1 + k];
107  result(i) = sum;
108  }
109 
110  return result;
111 }
static constexpr unsigned int N2
static constexpr unsigned int N
Dimensionality of rank-three tensor.
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...

◆ operator*() [2/2]

RankThreeTensor RankThreeTensor::operator* ( const Real  a) const

r_ijk*a

Definition at line 113 of file RankThreeTensor.C.

114 {
115  RankThreeTensor result;
116 
117  for (unsigned int i = 0; i < N3; ++i)
118  result._vals[i] = _vals[i] * b;
119 
120  return result;
121 }
RankThreeTensor is designed to handle any N-dimensional third order tensor, r.
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
static constexpr unsigned int N3

◆ operator*=()

RankThreeTensor & RankThreeTensor::operator*= ( const Real  a)

r_ijk *= a

Definition at line 124 of file RankThreeTensor.C.

125 {
126  for (unsigned int i = 0; i < N3; ++i)
127  _vals[i] *= a;
128 
129  return *this;
130 }
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
static constexpr unsigned int N3

◆ operator+()

RankThreeTensor RankThreeTensor::operator+ ( const RankThreeTensor a) const

r_ijkl + a_ijk

Definition at line 162 of file RankThreeTensor.C.

163 {
164  RankThreeTensor result;
165 
166  for (unsigned int i = 0; i < N3; ++i)
167  result._vals[i] = _vals[i] + b._vals[i];
168 
169  return result;
170 }
RankThreeTensor is designed to handle any N-dimensional third order tensor, r.
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
static constexpr unsigned int N3

◆ operator+=()

RankThreeTensor & RankThreeTensor::operator+= ( const RankThreeTensor a)

r_ijk += a_ijk for all i, j, k

Definition at line 153 of file RankThreeTensor.C.

154 {
155  for (unsigned int i = 0; i < N3; ++i)
156  _vals[i] += a._vals[i];
157 
158  return *this;
159 }
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
static constexpr unsigned int N3

◆ operator-() [1/2]

RankThreeTensor RankThreeTensor::operator- ( const RankThreeTensor a) const

r_ijk - a_ijk

Definition at line 182 of file RankThreeTensor.C.

183 {
184  RankThreeTensor result;
185 
186  for (unsigned int i = 0; i < N3; ++i)
187  result._vals[i] = _vals[i] - b._vals[i];
188 
189  return result;
190 }
RankThreeTensor is designed to handle any N-dimensional third order tensor, r.
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
static constexpr unsigned int N3

◆ operator-() [2/2]

RankThreeTensor RankThreeTensor::operator- ( ) const

-r_ijk

Definition at line 193 of file RankThreeTensor.C.

194 {
195  RankThreeTensor result;
196 
197  for (unsigned int i = 0; i < N3; ++i)
198  result._vals[i] = -_vals[i];
199 
200  return result;
201 }
RankThreeTensor is designed to handle any N-dimensional third order tensor, r.
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
static constexpr unsigned int N3

◆ operator-=()

RankThreeTensor & RankThreeTensor::operator-= ( const RankThreeTensor a)

r_ijk -= a_ijk

Definition at line 173 of file RankThreeTensor.C.

174 {
175  for (unsigned int i = 0; i < N3; ++i)
176  _vals[i] -= a._vals[i];
177 
178  return *this;
179 }
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
static constexpr unsigned int N3

◆ operator/()

RankThreeTensor RankThreeTensor::operator/ ( const Real  a) const

r_ijk/a

Definition at line 133 of file RankThreeTensor.C.

134 {
135  RankThreeTensor result;
136 
137  for (unsigned int i = 0; i < N3; ++i)
138  result._vals[i] = _vals[i] / b;
139 
140  return result;
141 }
RankThreeTensor is designed to handle any N-dimensional third order tensor, r.
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
static constexpr unsigned int N3

◆ operator/=()

RankThreeTensor & RankThreeTensor::operator/= ( const Real  a)

r_ijk /= a for all i, j, k

Definition at line 144 of file RankThreeTensor.C.

145 {
146  for (unsigned int i = 0; i < N3; ++i)
147  _vals[i] /= a;
148 
149  return *this;
150 }
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
static constexpr unsigned int N3

◆ operator=()

RankThreeTensor & RankThreeTensor::operator= ( const RankThreeTensor a)

copies values from a into this tensor

Definition at line 88 of file RankThreeTensor.C.

89 {
90  for (unsigned int i = 0; i < N3; ++i)
91  _vals[i] = a._vals[i];
92 
93  return *this;
94 }
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
static constexpr unsigned int N3

◆ print()

void RankThreeTensor::print ( std::ostream &  stm = Moose::out) const

Print the rank three tensor.

◆ rotate() [1/2]

template<class T >
void RankThreeTensor::rotate ( const T &  R)

Rotate the tensor using r_ijk = R_im R_in R_ko r_mno.

Definition at line 200 of file RankThreeTensor.h.

201 {
202  unsigned int index = 0;
203  for (unsigned int i = 0; i < N; ++i)
204  for (unsigned int j = 0; j < N; ++j)
205  for (unsigned int k = 0; k < N; ++k)
206  {
207  unsigned int index2 = 0;
208  Real sum = 0.0;
209  for (unsigned int m = 0; m < N; ++m)
210  {
211  Real a = R(i, m);
212  for (unsigned int n = 0; n < N; ++n)
213  {
214  Real ab = a * R(j, n);
215  for (unsigned int o = 0; o < N; ++o)
216  sum += ab * R(k, o) * _vals[index2++];
217  }
218  }
219  _vals[index++] = sum;
220  }
221 }
static constexpr unsigned int N
Dimensionality of rank-three tensor.
PetscInt m
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
PetscInt n

◆ rotate() [2/2]

void RankThreeTensor::rotate ( const RealTensorValue &  R)

Rotate the tensor using r_ijk = R_im R_in R_ko r_mno.

Definition at line 275 of file RankThreeTensor.C.

276 {
277  RankThreeTensor old = *this;
278 
279  unsigned int index = 0;
280  for (unsigned int i = 0; i < N; ++i)
281  for (unsigned int j = 0; j < N; ++j)
282  for (unsigned int k = 0; k < N; ++k)
283  {
284  Real sum = 0.0;
285  unsigned int index2 = 0;
286  for (unsigned int m = 0; m < N; ++m)
287  {
288  Real a = R(i, m);
289  for (unsigned int n = 0; n < N; ++n)
290  {
291  Real ab = a * R(j, n);
292  for (unsigned int o = 0; o < N; ++o)
293  sum += ab * R(k, o) * old._vals[index2++];
294  }
295  }
296  _vals[index++] = sum;
297  }
298 }
static constexpr unsigned int N
Dimensionality of rank-three tensor.
PetscInt m
RankThreeTensor is designed to handle any N-dimensional third order tensor, r.
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
PetscInt n

◆ zero()

void RankThreeTensor::zero ( )

Zeros out the tensor.

Definition at line 81 of file RankThreeTensor.C.

Referenced by fillFromInputVector().

82 {
83  for (unsigned int i = 0; i < N3; ++i)
84  _vals[i] = 0;
85 }
Real _vals[N3]
The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k) ...
static constexpr unsigned int N3

Friends And Related Function Documentation

◆ dataLoad

template<class T >
void dataLoad ( std::istream &  stream,
T &  v,
void *   
)
friend

Definition at line 418 of file DataIO.h.

419 {
420  stream.read((char *)&v, sizeof(v));
421 }

◆ dataStore

template<class T >
void dataStore ( std::ostream &  stream,
T &  v,
void *   
)
friend

Definition at line 156 of file DataIO.h.

157 {
158 #ifdef LIBMESH_HAVE_CXX11_TYPE_TRAITS
159  static_assert(std::is_polymorphic<T>::value == false,
160  "Cannot serialize a class that has virtual "
161  "members!\nWrite a custom dataStore() "
162  "template specialization!\n\n");
163  static_assert(std::is_trivially_copyable<T>::value || std::is_same<T, Point>::value,
164  "Cannot serialize a class that is not trivially copyable!\nWrite a custom "
165  "dataStore() template specialization!\n\n");
166 #endif
167 
168  // Moose::out<<"Generic dataStore"<<std::endl;
169  stream.write((char *)&v, sizeof(v));
170 }

Member Data Documentation

◆ _vals

Real RankThreeTensor::_vals[N3]
protected

The values of the rank-three tensor stored by index=((i * LIBMESH_DIM + j) * LIBMESH_DIM + k)

Definition at line 176 of file RankThreeTensor.h.

Referenced by dataLoad(), dataStore(), doubleContraction(), fillFromPlaneNormal(), fillGeneralFromInputVector(), L2norm(), operator()(), operator*(), operator*=(), operator+(), operator+=(), operator-(), operator-=(), operator/(), operator/=(), operator=(), RankThreeTensor(), rotate(), and zero().

◆ N

constexpr unsigned int RankThreeTensor::N = LIBMESH_DIM
staticprotected

Dimensionality of rank-three tensor.

Definition at line 171 of file RankThreeTensor.h.

Referenced by doubleContraction(), fillFromPlaneNormal(), mixedProductRankFour(), operator()(), operator*(), RankThreeTensor(), and rotate().

◆ N2

constexpr unsigned int RankThreeTensor::N2 = N * N
staticprotected

Definition at line 172 of file RankThreeTensor.h.

Referenced by doubleContraction(), and operator*().

◆ N3

constexpr unsigned int RankThreeTensor::N3 = N * N * N
staticprotected

The documentation for this class was generated from the following files: