B4 model

Theory

The present model is based on the B4 model proposed by Bazant et al. (2015) generalized to 3D. The constitutive law is given in total form as

\[\sig = \Cel : \epsE = \Cel : \left( \eps - \epsVE - \epsF - \epsDC -\epsSHR \right)\]

relating the nominal stress tensor \(\sig\) to the elastic strain tensor \(\epsE\) in terms of the fourth order stiffness tensor \(\Cel\). Where \(\eps\) is the total strain, \(\epsVE\) is the viscoelastic strain, \(\epsF\) is the viscous flow strain (with the sum of \(\epsVE\) and \(\epsF\) representing the basic creep strain), \(\epsDC\) is the strain due to drying creep and \(\epsSHR\) is the total shrinkage strain. A potential temperature dependence is not taken into account.

The implementation of the evolution of the visoelastic strain is using a solidifying Kelvin chain according to Bazant and Jirasek (2018). The drying creep strain is computed using an aging Kelvin chain.

The evolution of the instantaneous elastic strain and the basic creep strain are represented by the Solidification Theory generalized to three-dimensional stress states. The evolution of the instantaneous elastic strain \(\epsE\) is expressed as

\[\epsERate(t) = q_1 \DelNu : \sigRate(t),\]

in which \(q_1\) denotes the age-independent asymptotic compliance and \(\DelNu\) the unit compliance tensor. The evolution of the viscoelastic strain \(\epsVE\) is defined as

\[\epsVERate(t) = \frac{1}{v(t)} \int_0^t \PhiRate(t-t') \DelNu : d\sig(t'),\]

in terms of the solidified volume function \(v(t)\) and the compliance rate of the hydrated constituent \(\PhiRate(t-t')\). The solidified volume function

\[v(t) = \left[ \left( \frac{\lambda_0}{t} \right) ^m + \frac{q_3}{q_2} \right] ^{-1}\]

represents the time-dependent aging of the material. Where \(\lambda_0\) and \(m\) are material parameters with default values \(\lambda_0 = 1 \; \mathrm{d}\) and \(m = 0.5\). The anti-derivative of the compliance rate \(\PhiRate(t-t')\) is defined as

\[\Phi(t-t') = q_2 \ln\left( 1 + \left( \frac{t-t'}{\lambda_0} \right) ^n \right),\]

in which \(n\) is the exponent of the log-power law, with the default value \(n = 0.1\). The evolution of the viscous strain \(\epsF\) is governed by

\[\epsFRate(t) = q_4 \frac{1}{t} \DelNu : \sig(t).\]

In the above equations, \(q_2\), \(q_3\) and \(q_4\) denote the compliance parameters. The evolution of the drying strain \(\epsDC\) is described as

\[\epsDCRate (t) = \frac{1}{\exp(p_{\mathrm{5H}}/2)} \int_0^t \PhiRate_\mathrm{d}(t, t', t_0) \DelNu : d\sig(t'),\]

where \(t_0\) denotes the start of drying and \(p_{\mathrm{5H}}\) is a cement type dependent parameter, which is set to \(p_{\mathrm{5H}} = 8\) for slow and regular hardening cement. The anti-derivative of the drying creep compliance rate \(\PhiRate_d\) is definded as

\[\Phi_d(t,t',t_0) = q_5 \sqrt{ \left\langle \exp\left( b \tanh \sqrt{\xi-\xi_0} \right) - \exp \left( b \tanh \sqrt{-\xi_0} \right) \right\rangle}\]

in which \(q_5\) is the drying creep parameter, \(\xi = (t-t')/\tau_{\mathrm{shr,d}}\) and \(\xi_0 = (t_0-t')/\tau_{\mathrm{shr,d}}\) are dimensionless times, and \(b= p_{\mathrm{5H}}(1-h_{\mathrm{env}})\), in which \(h_{\mathrm{env}}\) is the ambient relative humidity.

The total shrinkage strain \(\epsSHR\) is assumed as the sum of the autogenous shrinkage strain \(\eps^\mathrm{shr,au}\) and the drying shrinkage strain \(\eps^\mathrm{shr,d}\). The evolution of the autogenous shrinkage strain \(\eps^\mathrm{shr,au}\) is described as

\[\eps^\mathrm{shr,au}(t) = \boldsymbol{\mathrm{I}} \eps^\mathrm{shr,au}_\infty \left[ 1+ \left( \frac{\tau_\mathrm{shr,au}}{t} \right) ^\alpha \right]^{-4.5}\]

in which \(\boldsymbol{\mathrm{I}}\) is the second order identity tensor, \(\eps^\mathrm{shr,au}_\infty\), \(\tau_\mathrm{shr,au}\) and \(\alpha\) are the ultimate autogenous shrinkage strain, the autogenous shrinkage halftime, and a parameter depending on the concrete composition and on the cement type, respectively. The evoluztion of the drying shrinkage strain \(\eps^\mathrm{shr,d}\) is defined as

\[\eps^\mathrm{shr,d}(t) = \boldsymbol{\mathrm{I}} \eps^\mathrm{shr,d}_\infty k_\mathrm{h} \tanh \sqrt{\frac{\left \langle t-t_0 \right \rangle }{\tau_{shr,d}}}\]

in which \(\eps^\mathrm{shr,d}_\infty\) denotes the ultimate drying shrinkage strain at zero humidity and \(\tau_{shr,d}\) the drying shrinkage halftime. The paramter \(k_{\mathrm{h}}\) is given as

\[\begin{split}k_{\mathrm{h}}= \begin{cases}1-h_{\mathrm{env}}^3 & \text { if } h_{\mathrm{env}} \leq 0.98, \\ 12.94\left(1-h_{\mathrm{env}}\right)-0.2 & \text { otherwise, }\end{cases}\end{split}\]

where currently only the first variant is implemented.

Implementation

class B4 : public MarmotMaterialHypoElastic

Inheritance diagram for Marmot::Materials::B4:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "1" [label="Marmot::Materials::B4" tooltip="Marmot::Materials::B4" fillcolor="#BFBFBF"]
    "4" [label="MarmotMaterial" tooltip="MarmotMaterial"]
    "2" [label="MarmotMaterialHypoElastic" tooltip="MarmotMaterialHypoElastic"]
    "3" [label="MarmotMaterialMechanical" tooltip="MarmotMaterialMechanical"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
    "2" -> "3" [dir=forward tooltip="public-inheritance"]
    "3" -> "4" [dir=forward tooltip="public-inheritance"]
}

Collaboration diagram for Marmot::Materials::B4:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "1" [label="Marmot::Materials::B4" tooltip="Marmot::Materials::B4" fillcolor="#BFBFBF"]
    "6" [label="Marmot::Materials::SolidificationTheory::KelvinChainProperties" tooltip="Marmot::Materials::SolidificationTheory::KelvinChainProperties"]
    "5" [label="Marmot::Materials::SolidificationTheory::Parameters" tooltip="Marmot::Materials::SolidificationTheory::Parameters"]
    "4" [label="MarmotMaterial" tooltip="MarmotMaterial"]
    "2" [label="MarmotMaterialHypoElastic" tooltip="MarmotMaterialHypoElastic"]
    "3" [label="MarmotMaterialMechanical" tooltip="MarmotMaterialMechanical"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
    "1" -> "5" [dir=forward tooltip="usage"]
    "1" -> "6" [dir=forward tooltip="usage"]
    "2" -> "3" [dir=forward tooltip="public-inheritance"]
    "3" -> "4" [dir=forward tooltip="public-inheritance"]
}

Implementation of a linear elastic material according to the B4 model by Bazant et al. (2015) generalized for 3D stress states.

For further information see b4.

Public Functions

B4(const double *materialProperties, int nMaterialProperties, int materialLabel)
virtual void computeStress(double *stress, double *dStressDDStrain, const double *dStrain, const double *timeOld, const double dT, double &pNewDT)

For a given linearized strain increment \(\Delta\boldsymbol{\varepsilon}\) at the old and the current time, compute the Cauchy stress and the algorithmic tangent \(\frac{\partial\boldsymbol{\sigma}^{(n+1)}}{\partial\boldsymbol{\varepsilon}^{(n+1)}}\).

Parameters:
  • stress[inout] Cauchy stress

  • dStressDDstrain[inout] Algorithmic tangent representing the derivative of the Cauchy stress tensor with respect to the linearized strain

  • dStrain[in] linearized strain increment

  • timeOld[in] Old (pseudo-)time

  • dt[in] (Pseudo-)time increment from the old (pseudo-)time to the current (pseudo-)time

  • pNewDT[inout] Suggestion for a new time increment

virtual int getNumberOfRequiredStateVars()
Returns:

Number of state variables required by the material.

virtual void assignStateVars(double *stateVars_, int nStateVars)

Assign state variable array to material.

Parameters:
  • stateVars[inout] Pointer to state variable array.

  • nStateVars[in] Number of state variables.

virtual StateView getStateView(const std::string &stateName)

Access material state variables by name.

Parameters:

stateName[in] Name of the requested state variable.

Returns:

A view into the state variable array.

Private Functions

template<typename T_>
inline T_ phi(T_ xi, double b, double xiZero)

drying creep compliance function

Private Members

const double &nu

Poisson’s ratio.

nu represents Poisson’s ratio for isotropic linear elasticity. It is a reference variable to materialProperties[0].

const double &q1

asymptotic elastic compliance parameter

q1 represents the first compliance parameter for Solidification Theory. It is a reference variable to materialProperties[1].

const double &q2

viscoelastic compliance parameter

q2 represents the second compliance parameter for Solidification Theory. It is a reference variable to materialProperties[2].

const double &q3

viscoelastic compliance parameter

q3 represents the third compliance parameter for Solidification Theory. It is a reference variable to materialProperties[3].

const double &q4

flow compliance parameter

q4 represents the fourth compliance parameter for Solidification Theory. It is a reference variable to materialProperties[4].

const double &n

log-power law exponent

n represents the exponent of the log-power law used in the compliance function of the hardened constituent. It is a reference variable to materialProperties[5].

const double &m

solidified volume exponent

m represents the exponent in the function describing the solidification of the material. It is a reference variable to materialProperties[6].

const size_t nKelvinBasic

number of Kelvin units to approximate the viscoelastic compliance

nKelvinBasic the number of Kelvin units used to approximate the viscoelastic compliance. It is a reference variable to materialProperties[7].

const double &minTauBasic

minimal retardation time used in the viscoelastic Kelvin chain

minTauBasic represents the minimal retardation time in days used in the Kelvin chain to approximate the viscoelastic compliance. It is a reference variable to materialProperties[8].

const double &ultimateAutogenousShrinkageStrain

ultimate autogenous shrinkage strain

ultimateAutogenousShrinkageStrain represents the ultimate autogenous shrinkage strain. It is a reference variable to materialProperties[9].

const double &autogenousShrinkageHalfTime

autogenous shrinkage half time

autogenousShrinkageHalfTime represents the autogenous shrinkage half time. It is a reference variable to materialProperties[10].

const double &alpha

autogenous shrinkage material parameter

alpha represents a cement type and concrete composition dependent material parameter for autogenous shrinkage. It is a reference variable to materialProperties[11].

const double &rt

autogenous shrinkage material parameter

rt represents a cement type dependent material parameter for autogenous shrinkage, whose value is rt = -4.50 for all cements. It is a reference variable to materialProperties[12].

const double &ultimateDryingShrinkageStrain

ultimate drying shrinkage strain

ultimateDryingShrinkageStrain represents the ultimate drying shrinkage strain at zero relative ambient humidity. It is a reference variable to materialProperties[13].

const double &dryingShrinkageHalfTime

drying shrinkage half time

dryingShrinkageHalfTime represents the drying shrinkage half time. It is a reference variable to materialProperties[14].

const double &dryingStart

drying start time

dryingStart represents start of drying in days. It is a reference variable to materialProperties[15].

const double &hEnv

relative ambient humidity

hEnv represents relative ambient humidity. It is a reference variable to materialProperties[16].

const double &q5

drying creep compliance parameter

q5 represents drying creep compliance parameter. It is a reference variable to materialProperties[17].

const size_t nKelvinDrying

number of Kelvin units to approximate the drying creep compliance

q5 represents the number of Kelvin units to approximate the drying creep compliance function. It is a reference variable to materialProperties[18].

const double &minTauDrying

minimal retardation time used in the drying creep Kelvin chain

minTauDrying represents the minimal retardation time used in the Kelvin chain to approximate the drying creep compliance function. It is a reference variable to materialProperties[19].

const double &castTime

time to start hydration

castTime represents the time at which hydration starts with respect to simulation time. It is a reference variable to materialProperties[20].

const double &timeToDays

ratio of simulation time to days

timeToDays represents the ratio of simulation time to days. It is a reference variable to materialProperties[21].

std::unique_ptr<B4StateVarManager> stateVarManager
SolidificationTheory::Parameters solidificationParameters

material parameters for Solidification Theory

SolidificationTheory::KelvinChainProperties solidificationKelvinProperties

properties of the Kelvin chain for approximating the viscoelastic compliance of the Solidification Theory

KelvinChain::Properties basicCreepElasticModuli

Young’s modulus of the Kelvin units representing basic creep.

KelvinChain::Properties basicCreepRetardationTimes

retardation times of the Kelvin units representing basic creep

Private Static Attributes

static int dryingCreepComplianceApproximationOrder = 5

approximation order of the Post-Widder formula for drying creep

static int basicCreepComplianceApproximationOrder = 2

approximation order of the Post-Widder formula for basic creep

class B4StateVarManager : public MarmotStateVarVectorManager

Inheritance diagram for Marmot::Materials::B4::B4StateVarManager:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "1" [label="Marmot::Materials::B4::B4StateVarManager" tooltip="Marmot::Materials::B4::B4StateVarManager" fillcolor="#BFBFBF"]
    "2" [label="MarmotStateVarVectorManager" tooltip="MarmotStateVarVectorManager"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
}

Collaboration diagram for Marmot::Materials::B4::B4StateVarManager:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "1" [label="Marmot::Materials::B4::B4StateVarManager" tooltip="Marmot::Materials::B4::B4StateVarManager" fillcolor="#BFBFBF"]
    "2" [label="MarmotStateVarVectorManager" tooltip="MarmotStateVarVectorManager"]
    "3" [label="MarmotStateVarVectorManager::StateVarVectorLayout" tooltip="MarmotStateVarVectorManager::StateVarVectorLayout"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
    "2" -> "3" [dir=forward tooltip="usage"]
}

Public Functions

inline B4StateVarManager(double *theStateVarVector, int nKelvinUnits)

Public Members

KelvinChain::mapStateVarMatrix kelvinStateVars

Public Static Attributes

static const auto layout = makeLayout( {{ .name = "kelvinStateVars", .length = 0 },} )