FiniteStrainJ2Plasticity.h
Go to the documentation of this file.
1 /* ---------------------------------------------------------------------
2  * _
3  * _ __ ___ __ _ _ __ _ __ ___ ___ | |_
4  * | '_ ` _ \ / _` | '__| '_ ` _ \ / _ \| __|
5  * | | | | | | (_| | | | | | | | | (_) | |_
6  * |_| |_| |_|\__,_|_| |_| |_| |_|\___/ \__|
7  *
8  * Unit of Strength of Materials and Structural Analysis
9  * University of Innsbruck
10  * 2020 - today
11  *
12  * festigkeitslehre@uibk.ac.at
13  *
14  * Alexander Dummer alexander.dummer@uibk.ac.at
15  *
16  * This file is part of the MAteRialMOdellingToolbox (marmot).
17  *
18  * This library is free software; you can redistribute it and/or
19  * modify it under the terms of the GNU Lesser General Public
20  * License as published by the Free Software Foundation; either
21  * version 2.1 of the License, or (at your option) any later version.
22  *
23  * The full text of the license can be found in the file LICENSE.md at
24  * the top level directory of marmot.
25  * ---------------------------------------------------------------------
26  */
27 
28 #pragma once
34 #include "Marmot/MarmotMath.h"
36 #include "Marmot/MarmotTypedefs.h"
37 #include <string>
38 
39 namespace Marmot::Materials {
40 
41  using namespace Fastor;
42  using namespace FastorStandardTensors;
43  using namespace FastorIndices;
44 
46  public:
47  using MarmotMaterialFiniteStrain::MarmotMaterialFiniteStrain;
48 
49  // elastic constants
50  const double K, G;
51 
52  // plasticity parameters
53  const double fy, fyInf, eta, H;
54 
55  // implementation
56  const int implementationType;
57 
58  FiniteStrainJ2Plasticity( const double* materialProperties, int nMaterialProperties, int materialLabel );
59 
60  void computeStress( ConstitutiveResponse< 3 >& response,
61  AlgorithmicModuli< 3 >& tangents,
62  const Deformation< 3 >& deformation,
63  const TimeIncrement& timeIncrement );
64  void computeStressWithScalarReturnMapping( ConstitutiveResponse< 3 >& response,
65  AlgorithmicModuli< 3 >& tangents,
66  const Deformation< 3 >& deformation,
67  const TimeIncrement& timeIncrement );
68  void computeStressWithFullReturnMapping( ConstitutiveResponse< 3 >& response,
69  AlgorithmicModuli< 3 >& tangents,
70  const Deformation< 3 >& deformation,
71  const TimeIncrement& timeIncrement );
72  void computeStressFDAF( ConstitutiveResponse< 3 >& response,
73  AlgorithmicModuli< 3 >& tangents,
74  const Deformation< 3 >& deformation,
75  const TimeIncrement& timeIncrement );
76  void computeStressFDAC( ConstitutiveResponse< 3 >& response,
77  AlgorithmicModuli< 3 >& tangents,
78  const Deformation< 3 >& deformation,
79  const TimeIncrement& timeIncrement );
80  void computeStressCSDA( ConstitutiveResponse< 3 >& response,
81  AlgorithmicModuli< 3 >& tangents,
82  const Deformation< 3 >& deformation,
83  const TimeIncrement& timeIncrement );
84  int getNumberOfRequiredStateVars() { return FiniteStrainJ2PlasticityStateVarManager::layout.nRequiredStateVars; }
85 
87 
88  public:
89  inline const static auto layout = makeLayout( {
90  { .name = "Fp", .length = 9 },
91  { .name = "alphaP", .length = 1 },
92  } );
93 
94  Fastor::TensorMap< double, 3, 3 > Fp;
95  double& alphaP;
96 
97  FiniteStrainJ2PlasticityStateVarManager( double* theStateVarVector )
98  : MarmotStateVarVectorManager( theStateVarVector, layout ), Fp( &find( "Fp" ) ), alphaP( find( "alphaP" ) ){};
99  };
100  std::unique_ptr< FiniteStrainJ2PlasticityStateVarManager > stateVars;
101 
102  void assignStateVars( double* stateVars, int nStateVars );
103 
104  StateView getStateView( const std::string& result );
105 
106  void initializeYourself();
107 
108  std::tuple< double, Tensor33d, double > yieldFunction( const Tensor33d& Fe, const double betaP )
109  {
110 
111  Tensor33d mandelStress;
112  Tensor3333d dMandel_dFe;
113  std::tie( mandelStress, dMandel_dFe ) = computeMandelStress( Fe );
114 
115  double f;
116  Tensor33d df_dMandel;
117  Tensor3333d d2f_dMandel_dMandel;
118  Tensor33d df_dFe;
119  double df_dBetaP;
120 
121  std::tie( f, df_dMandel, d2f_dMandel_dMandel, df_dBetaP ) = yieldFunctionFromStress( mandelStress, betaP );
122 
123  df_dFe = einsum< IJ, IJKL >( df_dMandel, dMandel_dFe );
124 
125  return { f, df_dFe, df_dBetaP };
126  }
127  template < typename T >
128  T yieldFunctionFromStress( const Tensor33t< T >& mandelStress, const T betaP )
129  {
130  const Tensor33t< T > dev = deviatoric( mandelStress );
131  T rho = sqrt( Fastor::inner( dev, dev ) );
132  if ( double( rho ) == 0.0 )
133  rho += 1e-15;
134  const T f = 1. / fy * ( rho - Marmot::Constants::sqrt2_3 * betaP );
135  return f;
136  }
137 
138  std::tuple< double, Tensor33d, Tensor3333d, double > yieldFunctionFromStress( const Tensor33d& mandelStress,
139  const double betaP )
140  {
141  Tensor33d dev = deviatoric( mandelStress );
142  const double rho = std::max( sqrt( Fastor::inner( dev, dev ) ), 1e-15 );
143  const double f = 1. / fy * ( rho - Marmot::Constants::sqrt2_3 * betaP );
144 
145  Tensor33d dRho_dMandel = 1. / rho * dev;
146 
147  Tensor3333d d2Rho_dMandel_dMandel = -1.0 / std::pow( rho, 3 ) * outer( dev, dev ) +
148  1. / rho *
149  ( einsum< ik, jl, to_ijkl >( Spatial3D::I, Spatial3D::I ) -
150  1. / 3 *
151  einsum< ij, IK, IL, to_ijKL >( Spatial3D::I,
152  Spatial3D::I,
153  Spatial3D::I ) );
154 
155  Tensor3333d d2f_dMandel_dMandel = 1. / fy * d2Rho_dMandel_dMandel;
156  Tensor33d df_dMandel = 1. / fy * dRho_dMandel;
157 
158  return { f, df_dMandel, d2f_dMandel_dMandel, -Constants::sqrt2_3 / fy };
159  }
160  template < typename T >
161  std::tuple< T, Tensor33t< T >, T > yieldFunctionFromStressFirstOrderDerived( const Tensor33t< T >& mandelStress,
162  const T betaP )
163  {
164  Tensor33t< T > dev = deviatoric( mandelStress );
165  T rho = sqrt( Fastor::inner( dev, dev ) );
166  if ( Math::makeReal( rho ) == 0.0 )
167  rho += 1e-15;
168  const T f = 1. / fy * ( rho - Marmot::Constants::sqrt2_3 * betaP );
169 
170  const Tensor33t< T > dRho_dMandel = multiplyFastorTensorWithScalar( dev, 1. / rho );
171 
172  const Tensor33t< T > df_dMandel = multiplyFastorTensorWithScalar( dRho_dMandel, T( 1. / fy ) );
173 
174  return { f, df_dMandel, T( -Constants::sqrt2_3 / fy ) };
175  }
176 
177  bool isYielding( const Tensor33d& Fe, const double betaP )
178  {
179  double f, df_dBetaP;
180  Tensor33d df_dFe;
181  std::tie( f, df_dFe, df_dBetaP ) = yieldFunction( Fe, betaP );
182  if ( f > 0.0 )
183  return true;
184  else
185  return false;
186  }
187 
188  std::tuple< Tensor33d, Tensor3333d > computeMandelStress( const Tensor33d& Fe )
189  {
190  using namespace Marmot::ContinuumMechanics;
191  Tensor33d Ce;
192  Tensor3333d dCe_dFe;
193  std::tie( Ce, dCe_dFe ) = DeformationMeasures::FirstOrderDerived::CauchyGreen( Fe );
194 
195  double psi_;
196  Tensor33d dPsi_dCe;
197  Tensor3333d d2Psi_dCedCe, dMandel_dCe;
198 
199  std::tie( psi_, dPsi_dCe, d2Psi_dCedCe ) = EnergyDensityFunctions::SecondOrderDerived::PenceGouPotentialB( Ce,
200  K,
201  G );
202  Tensor33d PK2 = 2.0 * dPsi_dCe;
203  const Tensor33d mandel = Ce % PK2;
204  /* const Tensor33d mandel = einsum< Ii, iJ >( Ce, PK2 ); */
205  dMandel_dCe = einsum< Ii, iJKL, to_IJKL >( Ce, 2. * d2Psi_dCedCe ) +
206  einsum< IK, iL, iJ, to_IJKL >( Spatial3D::I, Spatial3D::I, PK2 );
207  Tensor3333d dMandel_dFe = einsum< IJKL, KLMN >( dMandel_dCe, dCe_dFe );
208  return { mandel, dMandel_dFe };
209  }
210 
211  template < typename T >
213  {
214  using namespace Marmot::ContinuumMechanics;
216 
217  T psi_;
218  Tensor33t< T > dPsi_dCe;
219 
220  std::tie( psi_, dPsi_dCe ) = EnergyDensityFunctions::FirstOrderDerived::PenceGouPotentialB( Ce, K, G );
221  Tensor33t< T > PK2 = multiplyFastorTensorWithScalar( dPsi_dCe, T( 2.0 ) );
222  const Tensor33t< T > mandel = Ce % PK2;
223  return mandel;
224  }
225 
226  template < typename T >
227  T computeBetaPOnly( const T alphaP )
228  {
229  const T beta = fyInf + ( fy - fyInf ) * exp( -alphaP * eta ) + alphaP * H;
230  return beta;
231  }
232  std::tuple< double, double > computeBetaP( const double alphaP )
233  {
234  const double beta = fyInf + ( fy - fyInf ) * exp( -alphaP * eta ) + alphaP * H;
235  const double dBetaP_dAlphaP = -eta * ( fy - fyInf ) * exp( -alphaP * eta ) + H;
236  return { beta, dBetaP_dAlphaP };
237  }
238 
239  std::tuple< double, double > g( const Tensor33d& Fe_trial, const Tensor33d& df_dS, double dLambda, double betaP )
240  {
241  Tensor33d dFp, ddFp_ddLambda;
242  std::tie( dFp, ddFp_ddLambda ) = computePlasticIncrement( df_dS, dLambda );
243 
244  double f, df_dBetaP;
245  Tensor33d df_dFe;
246 
247  Tensor33d dFpInv = Fastor::inverse( dFp );
248  Tensor3333d dFe_ddFp = einsum< iI, iJKL >( Fe_trial, einsum< LI, JK, to_IJKL >( -dFpInv, dFpInv ) );
249 
250  std::tie( f, df_dFe, df_dBetaP ) = yieldFunction( Tensor33d( Fe_trial % dFpInv ), betaP );
251 
252  double df_ddLambda = einsum< IJ, IJKL, KL >( df_dFe, dFe_ddFp, ddFp_ddLambda ).toscalar();
253 
254  return { f, df_ddLambda };
255  }
256 
257  template < typename T >
259  {
260 
261  Tensor33d mandelStressTrial;
262  Tensor3333d dMandel_dFe;
263  std::tie( mandelStressTrial, dMandel_dFe ) = computeMandelStress( Fe );
264  double f, df_dBetaP;
265  Tensor33d df_dS;
266  std::tie( f, df_dS, df_dBetaP ) = yieldFunctionFromStress( mandelStressTrial, betaP );
267 
268  return df_dS;
269  }
270 
271  template < typename T >
272  std::tuple< Tensor33d, Tensor33d > computePlasticIncrement( Tensor33t< T > df_dS, T dLambda )
273  {
274 
275  Tensor33d dGp = multiplyFastorTensorWithScalar( df_dS, dLambda );
276  Tensor33d dFp;
277  Tensor3333d ddFp_ddGp;
279  exponentialMap( dGp );
280 
281  return { dFp, einsum< IJKL, KL >( ddFp_ddGp, df_dS ) };
282  }
283 
284  template < typename T >
285  VectorXt< T > computeResidualVector( const VectorXt< T >& X, const Tensor33d& FeTrial, const double alphaPTrial )
286  {
287 
288  const int idxA = 9;
289  const int idxF = 10;
290  using namespace Eigen;
291  using mV9t = Eigen::Map< Eigen::Matrix< T, 9, 1 > >;
292  VectorXt< T > R( 11 );
293  // initialize residual
294  /* R.segment< 9 >( 0 ) = -mV9t( fastorTensorFromDoubleTensor< T >( FeTrial
295  * ).data() ); */
296  R( 9 ) = -alphaPTrial;
297 
298  const Tensor33t< T > Fe( X.segment( 0, 9 ).data() );
299 
300  const T dLambda = X( 10 );
301  const T alphaP = X( 9 );
302 
303  const T betaP = computeBetaPOnly( alphaP );
304 
305  // compute mandel stress
306  Tensor33t< T > mandelStress = computeMandelStressOnly( Fe );
307 
308  T f, df_dBetaP;
309  Tensor33t< T > df_dMandel;
310  std::tie( f, df_dMandel, df_dBetaP ) = yieldFunctionFromStressFirstOrderDerived( mandelStress, betaP );
311 
312  const Tensor33t< T > dGp = multiplyFastorTensorWithScalar( df_dMandel, dLambda );
314 
315  VectorXt< T > aux = mV9t( Tensor33t< T >( einsum< iJ, JK >( Fe, dFp ) ).data() ) -
316  mV9t( fastorTensorFromDoubleTensor< T >( FeTrial ).data() );
317  R( 0 ) = aux( 0 );
318  R( 1 ) = aux( 1 );
319  R( 2 ) = aux( 2 );
320  R( 3 ) = aux( 3 );
321  R( 4 ) = aux( 4 );
322  R( 5 ) = aux( 5 );
323  R( 6 ) = aux( 6 );
324  R( 7 ) = aux( 7 );
325  R( 8 ) = aux( 8 );
326  R( idxA ) = ( alphaP + dLambda * df_dBetaP ) - alphaPTrial;
327  R( idxF ) = f;
328 
329  return R;
330  }
331  std::tuple< Eigen::VectorXd, Eigen::MatrixXd > computeResidualVectorAndTangent( const Eigen::VectorXd& X,
332  const Tensor33d& FeTrial,
333  const double alphaPTrial )
334  {
335 
336  const int idxA = 9;
337  const int idxF = 10;
338  using namespace Eigen;
339  using mV9d = Eigen::Map< Eigen::Matrix< double, 9, 1 > >;
340  using mM9d = Eigen::Map< Eigen::Matrix< double, 9, 9 > >;
341  VectorXd R( 11 );
342  MatrixXd dR_dX( 11, 11 );
343  dR_dX.setZero();
344  // initialize residual
345  R.segment< 9 >( 0 ) = -mV9d( FeTrial.data() );
346  R( 9 ) = -alphaPTrial;
347 
348  Tensor33d Fe( X.segment( 0, 9 ).data() );
349 
350  const double dLambda = X( 10 );
351  const double alphaP = X( 9 );
352 
353  /* std::cout << "dLambda: " << dLambda << std::endl; */
354  double betaP, dBetaP_dAlphaP;
355  std::tie( betaP, dBetaP_dAlphaP ) = computeBetaP( alphaP );
356 
357  // compute mandel stress
358  Tensor33d mandelStress;
359  Tensor3333d dMandel_dFe, d2f_dMandel_dMandel;
360  std::tie( mandelStress, dMandel_dFe ) = computeMandelStress( Fe );
361 
362  double f, df_dBetaP;
363  Tensor33d df_dMandel;
364  std::tie( f, df_dMandel, d2f_dMandel_dMandel, df_dBetaP ) = yieldFunctionFromStress( mandelStress, betaP );
365 
366  Tensor33d dGp = dLambda * df_dMandel;
367  Tensor33d dFp;
368  Tensor3333d ddFp_ddGp;
370  exponentialMap( dGp );
371 
372  Tensor3333d ddGp_dFe = dLambda * einsum< ijmn, mnkL >( d2f_dMandel_dMandel, dMandel_dFe );
373  Tensor33d ddFp_ddLambda = einsum< IJKL, KL >( ddFp_ddGp, df_dMandel );
374 
375  Tensor3333d ddFp_dFe = einsum< iImn, mnkL >( ddFp_ddGp, ddGp_dFe );
376  /* Tensor3333d dFeTrial_dFe = einsum< iIkL, iJ, to_IJkL >( ddFp_dFe, Fe ) +
377  */
378  /* einsum< iI, ik, JL, to_IJkL >( dFp,
379  * Spatial3D::I, Spatial3D::I ); */
380  Tensor3333d dFeTrial_dFe = einsum< iI, IJKL >( Fe, ddFp_dFe ) +
381  einsum< IK, JL, to_IJKL >( Spatial3D::I, transpose( Spatial3D::I % dFp ) );
382 
383  /* std::cout << "ddFeTrial_dFe: " << dFeTrial_dFe << std::endl; */
384 
385  /* Tensor33d dFe_ddLambda = einsum< iI, iJ >( ddFp_ddLambda, Fe ); */
386  Tensor33d dFe_ddLambda = einsum< Ii, iJ >( Fe, ddFp_ddLambda );
387 
388  df_dBetaP = -Constants::sqrt2_3 / fy;
389 
390  /* Tensor33d df_dFe = einsum< IJ, IJKL >( df_dMandel,
391  * dMandel_dFe ); */
392  Tensor33d df_dFe = einsum< IJ, IJKL >( df_dMandel, dMandel_dFe );
393  std::tie( f, df_dFe, df_dBetaP ) = yieldFunction( Fe, betaP );
394  df_dFe = einsum< IJ, IJKL >( df_dMandel, dMandel_dFe );
395 
396  /* R.segment< 9 >( 0 ) += mV9d( Tensor33d( einsum< iI, iJ >( dFp, Fe )
397  * ).data() ); */
398  R.segment< 9 >( 0 ) += mV9d( Tensor33d( einsum< iJ, JK >( Fe, dFp ) ).data() );
399  R( idxA ) += ( alphaP + dLambda * df_dBetaP );
400  R( idxF ) = f;
401 
402  dR_dX.block< 9, 9 >( 0, 0 ) = mM9d( dFeTrial_dFe.data() ).transpose();
403 
404  dR_dX.block< 1, 9 >( idxF, 0 ) = mV9d( df_dFe.data() );
405  dR_dX.block< 9, 1 >( 0, idxF ) = mV9d( dFe_ddLambda.data() );
406  dR_dX( idxF, idxA ) = df_dBetaP * dBetaP_dAlphaP;
407  dR_dX( idxA, idxF ) = df_dBetaP;
408  dR_dX( idxA, idxA ) = 1.0;
409 
410  return { R, dR_dX };
411  }
412  };
413 
414 } // namespace Marmot::Materials
Marmot::Materials::FiniteStrainJ2Plasticity::FiniteStrainJ2PlasticityStateVarManager::Fp
Fastor::TensorMap< double, 3, 3 > Fp
Definition: FiniteStrainJ2Plasticity.h:94
Marmot::Materials::FiniteStrainJ2Plasticity::computeMandelStress
std::tuple< Tensor33d, Tensor3333d > computeMandelStress(const Tensor33d &Fe)
Definition: FiniteStrainJ2Plasticity.h:188
Marmot::Constants::sqrt2_3
constexpr double sqrt2_3
Definition: MarmotConstants.h:51
Marmot::ContinuumMechanics::DeformationMeasures::CauchyGreen
Tensor33t< T > CauchyGreen(const Tensor33t< T > F_)
Definition: MarmotDeformationMeasures.h:39
Marmot::Materials::FiniteStrainJ2Plasticity::computeBetaP
std::tuple< double, double > computeBetaP(const double alphaP)
Definition: FiniteStrainJ2Plasticity.h:232
Marmot::Materials::FiniteStrainJ2Plasticity::computeReturnMappingDirection
Tensor33t< T > computeReturnMappingDirection(Tensor33t< T > Fe, T betaP)
Definition: FiniteStrainJ2Plasticity.h:258
Marmot::Math::exp
double exp(double x)
Definition: MarmotMath.cpp:13
Marmot::Materials::FiniteStrainJ2Plasticity::computePlasticIncrement
std::tuple< Tensor33d, Tensor33d > computePlasticIncrement(Tensor33t< T > df_dS, T dLambda)
Definition: FiniteStrainJ2Plasticity.h:272
MarmotFastorTensorBasics.h
MarmotMaterialFiniteStrain
Definition: MarmotMaterialFiniteStrain.h:33
Marmot::ContinuumMechanics::FiniteStrain::Plasticity::FlowIntegration::exponentialMap
Tensor33t< T > exponentialMap(const Tensor33t< T > &dGp)
Definition: MarmotFiniteStrainPlasticity.h:40
Marmot::multiplyFastorTensorWithScalar
Fastor::Tensor< T, Rest... > multiplyFastorTensorWithScalar(Fastor::Tensor< T, Rest... > tensor, T scalar)
Definition: MarmotFastorTensorBasics.h:338
MarmotTypedefs.h
MarmotMath.h
Marmot::Materials::FiniteStrainJ2Plasticity::FiniteStrainJ2PlasticityStateVarManager::alphaP
double & alphaP
Definition: FiniteStrainJ2Plasticity.h:95
Marmot::FastorStandardTensors::Spatial3D::I
const Tensor33d I
Definition: MarmotFastorTensorBasics.h:57
MarmotMaterialFiniteStrain::ConstitutiveResponse
Definition: MarmotMaterialFiniteStrain.h:40
Marmot::FastorStandardTensors::Tensor33d
Fastor::Tensor< double, 3, 3 > Tensor33d
Definition: MarmotFastorTensorBasics.h:38
Marmot::Materials
Definition: MarmotKelvinChain.h:34
Marmot::Materials::FiniteStrainJ2Plasticity::isYielding
bool isYielding(const Tensor33d &Fe, const double betaP)
Definition: FiniteStrainJ2Plasticity.h:177
Marmot::Materials::FiniteStrainJ2Plasticity::yieldFunctionFromStress
T yieldFunctionFromStress(const Tensor33t< T > &mandelStress, const T betaP)
Definition: FiniteStrainJ2Plasticity.h:128
Marmot::Materials::FiniteStrainJ2Plasticity::computeMandelStressOnly
Tensor33t< T > computeMandelStressOnly(const Tensor33t< T > &Fe)
Definition: FiniteStrainJ2Plasticity.h:212
MarmotStateVarVectorManager
A convenience auxiliary class for managing multiple statevars with arbitrary length in a single conse...
Definition: MarmotStateVarVectorManager.h:37
MarmotMaterialFiniteStrain::Deformation
Definition: MarmotMaterialFiniteStrain.h:52
Marmot::Materials::FiniteStrainJ2Plasticity::FiniteStrainJ2PlasticityStateVarManager
Definition: FiniteStrainJ2Plasticity.h:86
MarmotStateVarVectorManager.h
Marmot::Materials::FiniteStrainJ2Plasticity::yieldFunction
std::tuple< double, Tensor33d, double > yieldFunction(const Tensor33d &Fe, const double betaP)
Definition: FiniteStrainJ2Plasticity.h:108
Marmot::Math::makeReal
double makeReal(const double &value)
Definition: MarmotMath.cpp:37
Marmot::ContinuumMechanics
Definition: MarmotDeformationMeasures.h:31
Marmot::Materials::FiniteStrainJ2Plasticity::g
std::tuple< double, double > g(const Tensor33d &Fe_trial, const Tensor33d &df_dS, double dLambda, double betaP)
Definition: FiniteStrainJ2Plasticity.h:239
Marmot::ContinuumMechanics::EnergyDensityFunctions::PenceGouPotentialB
T PenceGouPotentialB(const Tensor33t< T > &C, const double K, const double G)
Definition: MarmotEnergyDensityFunctions.h:54
StateView
Definition: MarmotUtils.h:29
Marmot::VectorXt
Eigen::Matrix< T, -1, 1 > VectorXt
Definition: MarmotTypedefs.h:67
MarmotMaterialFiniteStrain::TimeIncrement
Definition: MarmotMaterialFiniteStrain.h:56
MarmotMaterialFiniteStrain::AlgorithmicModuli
Definition: MarmotMaterialFiniteStrain.h:47
Marmot::Materials::FiniteStrainJ2Plasticity::getNumberOfRequiredStateVars
int getNumberOfRequiredStateVars()
Definition: FiniteStrainJ2Plasticity.h:84
Marmot::ContinuumMechanics::FiniteStrain::Plasticity::FlowIntegration::FirstOrderDerived::exponentialMap
std::pair< Tensor33d, Tensor3333d > exponentialMap(const Tensor33d &deltaGp)
Definition: MarmotFiniteStrainPlasticity.cpp:22
Marmot::FastorStandardTensors::Tensor3333d
Fastor::Tensor< double, 3, 3, 3, 3 > Tensor3333d
Definition: MarmotFastorTensorBasics.h:40
MarmotDeformationMeasures.h
Marmot::Materials::FiniteStrainJ2Plasticity::implementationType
const int implementationType
Definition: FiniteStrainJ2Plasticity.h:56
Marmot::Materials::FiniteStrainJ2Plasticity::computeBetaPOnly
T computeBetaPOnly(const T alphaP)
Definition: FiniteStrainJ2Plasticity.h:227
MarmotMaterialFiniteStrain.h
Marmot::deviatoric
FastorStandardTensors::Tensor33t< T > deviatoric(const FastorStandardTensors::Tensor33t< T > &t)
Definition: MarmotFastorTensorBasics.h:449
Marmot::Materials::FiniteStrainJ2Plasticity::K
const double K
Definition: FiniteStrainJ2Plasticity.h:50
Marmot::Materials::FiniteStrainJ2Plasticity::yieldFunctionFromStress
std::tuple< double, Tensor33d, Tensor3333d, double > yieldFunctionFromStress(const Tensor33d &mandelStress, const double betaP)
Definition: FiniteStrainJ2Plasticity.h:138
Marmot::Materials::FiniteStrainJ2Plasticity::computeResidualVectorAndTangent
std::tuple< Eigen::VectorXd, Eigen::MatrixXd > computeResidualVectorAndTangent(const Eigen::VectorXd &X, const Tensor33d &FeTrial, const double alphaPTrial)
Definition: FiniteStrainJ2Plasticity.h:331
Marmot::Materials::FiniteStrainJ2Plasticity
Definition: FiniteStrainJ2Plasticity.h:45
MarmotFiniteStrainPlasticity.h
Marmot::Materials::FiniteStrainJ2Plasticity::computeResidualVector
VectorXt< T > computeResidualVector(const VectorXt< T > &X, const Tensor33d &FeTrial, const double alphaPTrial)
Definition: FiniteStrainJ2Plasticity.h:285
MarmotEnergyDensityFunctions.h
Marmot::Materials::FiniteStrainJ2Plasticity::yieldFunctionFromStressFirstOrderDerived
std::tuple< T, Tensor33t< T >, T > yieldFunctionFromStressFirstOrderDerived(const Tensor33t< T > &mandelStress, const T betaP)
Definition: FiniteStrainJ2Plasticity.h:161
Marmot::Materials::FiniteStrainJ2Plasticity::H
const double H
Definition: FiniteStrainJ2Plasticity.h:53
Marmot::FastorStandardTensors::Tensor33t
Fastor::Tensor< T, 3, 3 > Tensor33t
Definition: MarmotFastorTensorBasics.h:45
Marmot::Materials::FiniteStrainJ2Plasticity::stateVars
std::unique_ptr< FiniteStrainJ2PlasticityStateVarManager > stateVars
Definition: FiniteStrainJ2Plasticity.h:100
Marmot::Materials::FiniteStrainJ2Plasticity::FiniteStrainJ2PlasticityStateVarManager::FiniteStrainJ2PlasticityStateVarManager
FiniteStrainJ2PlasticityStateVarManager(double *theStateVarVector)
Definition: FiniteStrainJ2Plasticity.h:97