AnisotropicHookean.h
Go to the documentation of this file.
1 //Copyright (c) 2013-2023, The MercuryDPM Developers Team. All rights reserved.
2 //For the list of developers, see <http://MercuryDPM.org/Team>.
3 //
4 //Redistribution and use in source and binary forms, with or without
5 //modification, are permitted provided that the following conditions are met:
6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above copyright
9 // notice, this list of conditions and the following disclaimer in the
10 // documentation and/or other materials provided with the distribution.
11 // * Neither the name MercuryDPM nor the
12 // names of its contributors may be used to endorse or promote products
13 // derived from this software without specific prior written permission.
14 //
15 //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16 //ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 //WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 //DISCLAIMED. IN NO EVENT SHALL THE MERCURYDPM DEVELOPERS TEAM BE LIABLE FOR ANY
19 //DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 //LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 //ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 //(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24 //SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 
26 #ifndef MERCURYDPM_ANISOTROPICHOOKEAN_H
27 #define MERCURYDPM_ANISOTROPICHOOKEAN_H
28 #include "constitutive_laws.h"
29 
30 namespace oomph
31 {
32 
36 class AnisotropicHookean : public oomph::GeneralisedHookean
37 {
38  std::array<double, 3> anisotropy_ { 1.0, 1.0, 1.0 };
39 
40 public:
41 
42  void setAnisotropy(std::array<double, 3> anisotropy) {
43  anisotropy_ = anisotropy;
44  }
45 
48  AnisotropicHookean( double* nu_pt, double* e_pt )
49  : GeneralisedHookean( nu_pt, e_pt ) {}
50 
51  //=====================================================================
56  //=====================================================================
58  const DenseMatrix<double>& g,
59  const DenseMatrix<double>& G,
60  DenseMatrix<double>& sigma)
61  {
62  GeneralisedHookean::calculate_second_piola_kirchhoff_stress(g, G, sigma);
63 
64  // Make anisotropic
65  const unsigned dim = sigma.nrow();
66  for (unsigned i = 0; i < dim; i++)
67  {
68  for ( unsigned j = 0; j < dim; j++ )
69  {
70  sigma( i, j) *= anisotropy_[i];
71  }
72  }
73 
74  // Symmetrize
75  for (unsigned i = 0; i < dim; i++)
76  {
77  for (unsigned j = 0; j < i; j++)
78  {
79  sigma(i, j) = sigma(j, i);
80  }
81  }
82  }
83 };
84 }
85 
86 #endif//MERCURYDPM_ANISOTROPICHOOKEAN_H
Definition: AnisotropicHookean.h:37
std::array< double, 3 > anisotropy_
Definition: AnisotropicHookean.h:38
AnisotropicHookean(double *nu_pt, double *e_pt)
Definition: AnisotropicHookean.h:48
void calculate_second_piola_kirchhoff_stress(const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma)
Definition: AnisotropicHookean.h:57
void setAnisotropy(std::array< double, 3 > anisotropy)
Definition: AnisotropicHookean.h:42
const std::complex< Mdouble > i
Definition: ExtendedMath.h:51
Definition: AnisotropicHookean.h:31