1 /*---------------------------------------------------------------------------*\
3 \\ / F ield | foam-extend: Open Source CFD
4 \\ / O peration | Version: 3.2
5 \\ / A nd | Web: http://www.foam-extend.org
6 \\/ M anipulation | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
9 This file is part of foam-extend.
11 foam-extend is free software: you can redistribute it and/or modify it
12 under the terms of the GNU General Public License as published by the
13 Free Software Foundation, either version 3 of the License, or (at your
14 option) any later version.
16 foam-extend is distributed in the hope that it will be useful, but
17 WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
28 Material rheology for solids.
30 \*---------------------------------------------------------------------------*/
32 #include "rheologyLaw.H"
33 #include "volFields.H"
36 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
41 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
43 defineTypeNameAndDebug(rheologyLaw, 0);
44 defineRunTimeSelectionTable(rheologyLaw, dictionary);
47 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
49 rheologyLaw::rheologyLaw
52 const volSymmTensorField& sigma,
53 const dictionary& dict
61 // * * * * * * * * * * * * * * * Member functions * * * * * * * * * * * * * * //
63 Foam::tmp<Foam::volDiagTensorField> Foam::rheologyLaw::K() const
66 ( (1 - nu()*nu() - nu()*nu() - nu()*nu() - 2*nu()*nu()*nu())
68 volScalarField A11 = ( (1 - nu()*nu())/(J*E()*E()) );
69 volScalarField A22 = ( (1 - nu()*nu())/(J*E()*E()) );
70 volScalarField A33 = ( (1 - nu()*nu())/(J*E()*E()) );
72 tmp<volDiagTensorField> tresult
74 new volDiagTensorField
79 mesh().time().timeName(),
85 dimensionedDiagTensor("K", A11.dimensions(), diagTensor::zero)
89 volDiagTensorField& result = tresult();
91 result.replace(diagTensor::XX, A11);
92 result.replace(diagTensor::YY, A22);
93 result.replace(diagTensor::ZZ, A33);
95 tresult().correctBoundaryConditions();
101 Foam::tmp<Foam::volSymmTensor4thOrderField> Foam::rheologyLaw::C() const
103 volScalarField twoMu = 2.0*E()/(2.0*(1+nu()));
104 volScalarField lambda = nu()*E()/((1.0 + nu())*(1.0 - 2.0*nu()));
105 volScalarField twoMuLambda = twoMu + lambda;
107 // symmTensor4thOrder C (
108 // 2*mu + lambda, lambda, lambda,
109 // 2*mu + lambda, lambda,
116 tmp<volSymmTensor4thOrderField> tresult
118 new volSymmTensor4thOrderField
123 mesh().time().timeName(),
129 dimensionedSymmTensor4thOrder
130 ("C", twoMu.dimensions(), symmTensor4thOrder::zero)
134 volSymmTensor4thOrderField& result = tresult();
136 result.replace(symmTensor4thOrder::XXXX, twoMuLambda);
137 result.replace(symmTensor4thOrder::XXYY, lambda);
138 result.replace(symmTensor4thOrder::XXZZ, lambda);
140 result.replace(symmTensor4thOrder::YYYY, twoMuLambda);
141 result.replace(symmTensor4thOrder::YYZZ, lambda);
143 result.replace(symmTensor4thOrder::ZZZZ, twoMuLambda);
145 result.replace(symmTensor4thOrder::XYXY, twoMu);
146 result.replace(symmTensor4thOrder::YZYZ, twoMu);
147 result.replace(symmTensor4thOrder::ZXZX, twoMu);
149 tresult().correctBoundaryConditions();
154 } // End namespace Foam
156 // ************************************************************************* //