LinearViscoelasticPowerLaw.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
32 #include <iostream>
33 #include <string>
34 #include <vector>
35 
36 namespace Marmot::Materials {
37 
46 
48  const double& E;
49 
51  const double& nu;
52 
54  const double& m;
55 
57  const double& n;
58 
60  const size_t nKelvin;
61 
63  const double& minTau;
64 
66  const double& timeToDays;
67 
69 
70  public:
71  inline const static auto layout = makeLayout( {
72  { .name = "kelvinStateVars", .length = 0 },
73  } );
74 
76 
77  LinearViscoelasticPowerLawStateVarManager( double* theStateVarVector, int nKelvinUnits )
78  : MarmotStateVarVectorManager( theStateVarVector, layout ),
79  kelvinStateVars( &find( "kelvinStateVars" ), 6, nKelvinUnits ){};
80  };
81  std::unique_ptr< LinearViscoelasticPowerLawStateVarManager > stateVarManager;
82 
83  public:
84  using MarmotMaterialHypoElastic::MarmotMaterialHypoElastic;
85 
86  LinearViscoelasticPowerLaw( const double* materialProperties, int nMaterialProperties, int materialLabel );
87 
88  void computeStress( double* stress,
89  double* dStressDDStrain,
90 
91  const double* dStrain,
92  const double* timeOld,
93  const double dT,
94  double& pNewDT );
95 
97 
98  void assignStateVars( double* stateVars_, int nStateVars );
99 
100  StateView getStateView( const std::string& stateName );
101 
102  private:
106 
107  static constexpr int powerLawApproximationOrder = 2;
108  };
109 } // namespace Marmot::Materials
MarmotMaterialHypoElastic.h
Marmot::Materials::LinearViscoelasticPowerLaw::nu
const double & nu
Poisson's ratio.
Definition: LinearViscoelasticPowerLaw.h:51
Marmot::Materials::LinearViscoelasticPowerLaw::m
const double & m
power law compliance parameter
Definition: LinearViscoelasticPowerLaw.h:54
Marmot::Materials::LinearViscoelasticPowerLaw::LinearViscoelasticPowerLaw
LinearViscoelasticPowerLaw(const double *materialProperties, int nMaterialProperties, int materialLabel)
Definition: LinearViscoelasticPowerLaw.cpp:18
MarmotKelvinChain.h
Marmot::Materials::LinearViscoelasticPowerLaw
Implementation of a linear elastic material according to the LinearViscoelasticPowerLaw model by Baza...
Definition: LinearViscoelasticPowerLaw.h:45
Marmot::Materials::LinearViscoelasticPowerLaw::timeToDays
const double & timeToDays
ratio of simulation time to days
Definition: LinearViscoelasticPowerLaw.h:66
Marmot::Materials::KelvinChain::mapStateVarMatrix
Eigen::Map< StateVarMatrix > mapStateVarMatrix
Definition: MarmotKelvinChain.h:42
Marmot::Materials::LinearViscoelasticPowerLaw::LinearViscoelasticPowerLawStateVarManager::LinearViscoelasticPowerLawStateVarManager
LinearViscoelasticPowerLawStateVarManager(double *theStateVarVector, int nKelvinUnits)
Definition: LinearViscoelasticPowerLaw.h:77
Marmot::Materials
Definition: MarmotKelvinChain.h:34
Marmot::Materials::LinearViscoelasticPowerLaw::assignStateVars
void assignStateVars(double *stateVars_, int nStateVars)
Definition: LinearViscoelasticPowerLaw.cpp:98
Marmot::Materials::LinearViscoelasticPowerLaw::elasticModuli
KelvinChain::Properties elasticModuli
Definition: LinearViscoelasticPowerLaw.h:103
Marmot::Materials::LinearViscoelasticPowerLaw::E
const double & E
Young's modulus.
Definition: LinearViscoelasticPowerLaw.h:48
Marmot::Materials::LinearViscoelasticPowerLaw::n
const double & n
power law exponent
Definition: LinearViscoelasticPowerLaw.h:57
Marmot::Materials::LinearViscoelasticPowerLaw::retardationTimes
KelvinChain::Properties retardationTimes
Definition: LinearViscoelasticPowerLaw.h:104
MarmotStateVarVectorManager
A convenience auxiliary class for managing multiple statevars with arbitrary length in a single conse...
Definition: MarmotStateVarVectorManager.h:37
MarmotStateVarVectorManager.h
Marmot::Materials::LinearViscoelasticPowerLaw::stateVarManager
std::unique_ptr< LinearViscoelasticPowerLawStateVarManager > stateVarManager
Definition: LinearViscoelasticPowerLaw.h:81
Marmot::Materials::LinearViscoelasticPowerLaw::LinearViscoelasticPowerLawStateVarManager::layout
static const auto layout
Definition: LinearViscoelasticPowerLaw.h:71
StateView
Definition: MarmotUtils.h:29
Marmot::Materials::LinearViscoelasticPowerLaw::nKelvin
const size_t nKelvin
number of Kelvin units to approximate the viscoelastic compliance
Definition: LinearViscoelasticPowerLaw.h:60
Marmot::Materials::LinearViscoelasticPowerLaw::minTau
const double & minTau
minimal retardation time used in the viscoelastic Kelvin chain
Definition: LinearViscoelasticPowerLaw.h:63
Marmot::Materials::LinearViscoelasticPowerLaw::LinearViscoelasticPowerLawStateVarManager::kelvinStateVars
KelvinChain::mapStateVarMatrix kelvinStateVars
Definition: LinearViscoelasticPowerLaw.h:75
Marmot::Materials::KelvinChain::Properties
Eigen::VectorXd Properties
Definition: MarmotKelvinChain.h:38
Marmot::Materials::LinearViscoelasticPowerLaw::getStateView
StateView getStateView(const std::string &stateName)
Definition: LinearViscoelasticPowerLaw.cpp:108
Marmot::Materials::LinearViscoelasticPowerLaw::LinearViscoelasticPowerLawStateVarManager
Definition: LinearViscoelasticPowerLaw.h:68
Marmot::Materials::LinearViscoelasticPowerLaw::computeStress
void computeStress(double *stress, double *dStressDDStrain, const double *dStrain, const double *timeOld, const double dT, double &pNewDT)
Definition: LinearViscoelasticPowerLaw.cpp:47
MarmotStateVarVectorManager::makeLayout
static StateVarVectorLayout makeLayout(const std::vector< StateVarEntryDefinition > &theEntries)
generate the statevar vector layout from a list of entries, defined by name and length
Definition: MarmotStateVarVectorManager.h:74
Marmot::Materials::LinearViscoelasticPowerLaw::zerothKelvinChainCompliance
double zerothKelvinChainCompliance
Definition: LinearViscoelasticPowerLaw.h:105
Marmot::Materials::LinearViscoelasticPowerLaw::powerLawApproximationOrder
static constexpr int powerLawApproximationOrder
Definition: LinearViscoelasticPowerLaw.h:107
Marmot::Materials::LinearViscoelasticPowerLaw::getNumberOfRequiredStateVars
int getNumberOfRequiredStateVars()
Definition: LinearViscoelasticPowerLaw.cpp:113
MarmotMaterial::nStateVars
int nStateVars
Definition: MarmotMaterial.h:39
MarmotMaterial::nMaterialProperties
const int nMaterialProperties
Definition: MarmotMaterial.h:36
MarmotMaterial::materialProperties
const double * materialProperties
Definition: MarmotMaterial.h:35
MarmotStateVarVectorManager::find
double & find(const std::string &name) const
get the reference to the first array element of an entry in the statevar vector
Definition: MarmotStateVarVectorManager.h:48
MarmotMaterialHypoElastic
Definition: MarmotMaterialHypoElastic.h:54