www.mooseframework.org
SymmElasticityTensor.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 #include "SymmTensor.h"
13 
14 #include "MaterialProperty.h"
15 
16 #include "libmesh/vector_value.h"
17 
18 #include <vector>
19 
56 {
57 public:
64  SymmElasticityTensor(const bool constant = false);
65 
66  void constant(bool c) { _constant = c; }
67 
68  virtual ~SymmElasticityTensor() {}
69 
70  void copyValues(SymmElasticityTensor & rhs) const
71  {
72  for (unsigned i(0); i < 21; ++i)
73  {
74  rhs._val[i] = _val[i];
75  }
76  }
77 
82  void calculate(unsigned int qp);
83 
84  virtual void multiply(const SymmTensor & x, SymmTensor & b) const;
85  SymmTensor operator*(const SymmTensor & x) const;
86  SymmElasticityTensor operator*(Real x) const;
87 
88  virtual Real stiffness(const unsigned int i,
89  const unsigned int j,
90  const RealGradient & test,
91  const RealGradient & phi) const;
92 
94  {
95  SymmElasticityTensor t = *this;
96 
97  t += rhs;
98 
99  return t;
100  }
101 
103  {
104  for (unsigned i(0); i < 21; ++i)
105  {
106  _val[i] += rhs._val[i];
107  }
108  }
109 
111  {
112  for (unsigned i(0); i < 21; ++i)
113  {
114  _val[i] -= rhs._val[i];
115  }
116  }
117 
118  void operator*=(Real rhs)
119  {
120  for (unsigned i(0); i < 21; ++i)
121  {
122  _val[i] *= rhs;
123  }
124  }
125 
126  void operator/=(Real rhs)
127  {
128  for (unsigned i(0); i < 21; ++i)
129  {
130  _val[i] /= rhs;
131  }
132  }
133 
134  void zero()
135  {
136  for (unsigned i(0); i < 21; ++i)
137  {
138  _val[i] = 0;
139  }
140  }
141 
142  void convertFrom9x9(const ColumnMajorMatrix & cmm);
143  void convertFrom6x6(const ColumnMajorMatrix & cmm);
144 
145  ColumnMajorMatrix columnMajorMatrix9x9() const;
146  ColumnMajorMatrix columnMajorMatrix6x6() const;
147 
148  void form9x9Rotation(const ColumnMajorMatrix & R_3x3, ColumnMajorMatrix & R_9x9) const;
149  void rotateFromGlobalToLocal(const ColumnMajorMatrix & R);
150  void rotateFromLocalToGlobal(const ColumnMajorMatrix & R);
151 
152  virtual void adjustForCracking(const RealVectorValue & crack_flags);
153  virtual void adjustForCrackingWithShearRetention(const RealVectorValue & crack_flags);
154 
155  virtual SymmElasticityTensor calculateDerivative(unsigned int qp, unsigned int i);
156 
157  friend std::ostream & operator<<(std::ostream & stream, const SymmElasticityTensor & obj);
158 
159  void fillFromInputVector(std::vector<Real> input, bool all);
160 
161  Real sum_3x3() const;
162  RealGradient sum_3x1() const;
163 
164  /*
165  * @return the value of the tensor given the index supplied.
166  */
167  Real valueAtIndex(int i) const;
168 
169 protected:
173  bool _constant;
174 
179 
186  virtual void calculateEntries(unsigned int qp);
187 
188  Real _val[21]; // 6 in first row (column)
189  // 5 in second
190  // 4 in third
191  // 3 in fourth
192  // 2 in fifth
193  // 1 in sixth
194 
195  template <class T>
196  friend void dataStore(std::ostream &, T &, void *);
197 
198  template <class T>
199  friend void dataLoad(std::istream &, T &, void *);
200 };
201 
202 template <>
203 void dataStore(std::ostream &, SymmElasticityTensor &, void *);
204 
205 template <>
206 void dataLoad(std::istream &, SymmElasticityTensor &, void *);
207 
SymmElasticityTensor::calculate
void calculate(unsigned int qp)
Public function that will be called whenever the values for this matrix need to be filled in.
Definition: SymmElasticityTensor.C:41
SymmElasticityTensor::rotateFromLocalToGlobal
void rotateFromLocalToGlobal(const ColumnMajorMatrix &R)
Definition: SymmElasticityTensor.C:360
SymmElasticityTensor::operator*=
void operator*=(Real rhs)
Definition: SymmElasticityTensor.h:118
SymmTensor.h
SymmElasticityTensor::convertFrom9x9
void convertFrom9x9(const ColumnMajorMatrix &cmm)
Definition: SymmElasticityTensor.C:158
SymmElasticityTensor::sum_3x3
Real sum_3x3() const
Definition: SymmElasticityTensor.C:415
SymmElasticityTensor::valueAtIndex
Real valueAtIndex(int i) const
Definition: SymmElasticityTensor.C:409
SymmElasticityTensor::multiply
virtual void multiply(const SymmTensor &x, SymmTensor &b) const
Definition: SymmElasticityTensor.C:56
SymmElasticityTensor::rotateFromGlobalToLocal
void rotateFromGlobalToLocal(const ColumnMajorMatrix &R)
Definition: SymmElasticityTensor.C:366
SymmElasticityTensor::operator<<
friend std::ostream & operator<<(std::ostream &stream, const SymmElasticityTensor &obj)
Definition: SymmElasticityTensor.C:306
libMesh::RealGradient
VectorValue< Real > RealGradient
Definition: GrainForceAndTorqueInterface.h:17
SymmElasticityTensor::_values_computed
bool _values_computed
Whether or not the values have been computed once.
Definition: SymmElasticityTensor.h:178
SymmElasticityTensor::copyValues
void copyValues(SymmElasticityTensor &rhs) const
Definition: SymmElasticityTensor.h:70
SymmElasticityTensor::adjustForCracking
virtual void adjustForCracking(const RealVectorValue &crack_flags)
Definition: SymmElasticityTensor.C:372
SymmElasticityTensor::form9x9Rotation
void form9x9Rotation(const ColumnMajorMatrix &R_3x3, ColumnMajorMatrix &R_9x9) const
Definition: SymmElasticityTensor.C:341
SymmElasticityTensor::operator/=
void operator/=(Real rhs)
Definition: SymmElasticityTensor.h:126
SymmElasticityTensor::stiffness
virtual Real stiffness(const unsigned int i, const unsigned int j, const RealGradient &test, const RealGradient &phi) const
Definition: SymmElasticityTensor.C:87
SymmElasticityTensor::constant
void constant(bool c)
Definition: SymmElasticityTensor.h:66
SymmElasticityTensor::adjustForCrackingWithShearRetention
virtual void adjustForCrackingWithShearRetention(const RealVectorValue &crack_flags)
Definition: SymmElasticityTensor.C:378
SymmElasticityTensor::dataLoad
friend void dataLoad(std::istream &, T &, void *)
SymmElasticityTensor::operator+=
void operator+=(const SymmElasticityTensor &rhs)
Definition: SymmElasticityTensor.h:102
SymmElasticityTensor::convertFrom6x6
void convertFrom6x6(const ColumnMajorMatrix &cmm)
Definition: SymmElasticityTensor.C:194
SymmElasticityTensor
This class defines a basic set of capabilities any elasticity tensor should have.
Definition: SymmElasticityTensor.h:55
SymmElasticityTensor::operator+
SymmElasticityTensor operator+(const SymmElasticityTensor &rhs) const
Definition: SymmElasticityTensor.h:93
SymmElasticityTensor::SymmElasticityTensor
SymmElasticityTensor(const bool constant=false)
Default constructor...
Definition: SymmElasticityTensor.C:31
dataLoad
void dataLoad(std::istream &, SymmElasticityTensor &, void *)
Definition: SymmElasticityTensor.C:24
SymmElasticityTensor::_constant
bool _constant
Whether or not the matrix is constant for all of time and space.
Definition: SymmElasticityTensor.h:173
SymmTensor
Definition: SymmTensor.h:21
SymmElasticityTensor::zero
void zero()
Definition: SymmElasticityTensor.h:134
SymmElasticityTensor::operator-=
void operator-=(const SymmElasticityTensor &rhs)
Definition: SymmElasticityTensor.h:110
SymmElasticityTensor::calculateDerivative
virtual SymmElasticityTensor calculateDerivative(unsigned int qp, unsigned int i)
Definition: SymmElasticityTensor.C:328
SymmElasticityTensor::dataStore
friend void dataStore(std::ostream &, T &, void *)
SymmElasticityTensor::calculateEntries
virtual void calculateEntries(unsigned int qp)
Virtual (must be overriden by derived class).
Definition: SymmElasticityTensor.C:51
SymmElasticityTensor::columnMajorMatrix6x6
ColumnMajorMatrix columnMajorMatrix6x6() const
Definition: SymmElasticityTensor.C:230
SymmElasticityTensor::_val
Real _val[21]
Definition: SymmElasticityTensor.h:188
SymmElasticityTensor::~SymmElasticityTensor
virtual ~SymmElasticityTensor()
Definition: SymmElasticityTensor.h:68
SymmElasticityTensor::fillFromInputVector
void fillFromInputVector(std::vector< Real > input, bool all)
Definition: SymmElasticityTensor.C:384
dataStore
void dataStore(std::ostream &, SymmElasticityTensor &, void *)
Definition: SymmElasticityTensor.C:15
SymmElasticityTensor::sum_3x1
RealGradient sum_3x1() const
Definition: SymmElasticityTensor.C:422
SymmElasticityTensor::operator*
SymmTensor operator*(const SymmTensor &x) const
Definition: SymmElasticityTensor.C:79
SymmElasticityTensor::columnMajorMatrix9x9
ColumnMajorMatrix columnMajorMatrix9x9() const
Definition: SymmElasticityTensor.C:245