NonlinearViscosity

Nonlinear Viscosity Model

The NonlinearViscosity class is an abstract class that provides a general nonlinear framework for implementations of various viscous type material, such as a dashpot.

The stress shall be computed by

σ=sign(ε˙)η(ε,ε˙)ε˙α.\sigma=\text{sign}\left(\dot\varepsilon\right)\cdot\eta\left(\varepsilon,\dot\varepsilon\right) \cdot|\dot\varepsilon|^\alpha.

The so-called viscosity η(ε,ε˙)\eta\left(\varepsilon,\dot\varepsilon\right) can be a general function of strain and/or strain rate.

If the target material is not characterized by the classic power-law, it is possible to pass α=0\alpha=0 to the NonlinearViscosity class so that the response becomes

σ=η(ε,ε˙)\sigma=\eta\left(\varepsilon,\dot\varepsilon\right)

that can be purely determined by the derived class.

Things to Pass to Ctor

The default constructor is defined to be

 NonlinearViscosity(unsigned, // tag
                    double,   // alpha
                    double    // cut-off
 );

The second parameter is the exponent α\alpha. The third parameter is a non-negative parameter that defines a segment of cubic function that approximates the original exponential function to achieve a better numerical performance.

Things to Override

Three private methods need to be overridden.

 [[nodiscard]] virtual double compute_du(double, double) const = 0; // compute derivative w.r.t. strain
 [[nodiscard]] virtual double compute_dv(double, double) const = 0; // compute derivative w.r.t. strain rate
 [[nodiscard]] virtual double compute_damping_coefficient(double, double) const = 0; // compute \eta

All three methods take strain and strain rate to be two input arguments.

Derived Material Models

Last updated