General Theory:

The Hyperelastic Viscoplastic model is based on the multiplicative decomposition of the total deformation ($$\underline{F}$$$) gradient into an elastic ($$\underline{F}^e$$$) and viscoplastic ($$\underline{F}^{vp}$$$) component. The viscoplastic component of deformation is evolved in the intermediate configuration following $$\dot{\underline{F}}^{vp}\underline{F}^{vp-1} = \sum_{i=1}^{N} \dot{\lambda^i}\underline{r}^i$$$ ------- (1)

where $$\dot{\lambda^i}$$$and $$\underline{r}^i$$$ are the flow rate and flow directions, respectively, and, $$N$$$is the number of flow rates. This representation allows different flow rates and directions to be superimposed to obtain an effective viscoplastic deformation of the material. Implementation Overview: The integration of the model is performed using a combination of Material and DiscreteElementUserObject classes. In the material class (FiniteStrainHyperElasticViscoPlastic) the following residual equations are set for every flow rate $$R^i_{j+1} = \dot{\lambda^i}_j - \dot{\lambda^i}_{j+1}$$$ ------- (2)

where $$1 \le i \le N$$$represents flow rates and $$0 \le j \le max\_iter$$$ are the Newton-Raphson iterations. Following every iteration, the state is updated based on the new flow rate following this sequence:

(i) $$\underline{F}^{vp}$$$(ii) rates of state (internal) variables (e.g. equivalent plastic strain rate) (iii) update state variables (e.g. equivalent plastic strain) (iv) resistive stresses or strengths (e.g. yield stress) (v) elastic right cauchy Green tensor ($$\underline{C}^e$$$).

(vi) 2$$^{nd}$$$Piola-Kirchhoff (PK2). Separate UserObject classes are defined to perform tasks (ii)-(iv). The flow rates and directions are also calculated using UserObjects. The material class declares properties associated with each of the UserObjects and calls the functions in the UserObjects to perform the update as described above. Properties declared in the material class have the same name as that of the UserObject (see tests). The Jacobian is also constructed based on chain rule as follows $$\frac{dR^i}{d\dot{\lambda}^k}=\delta^{ik}-\frac{d\dot{\lambda}^i}{d\underline{T}}:\frac{d\underline{T}}{d\dot{\lambda}^k}-\sum\frac{d\dot{\lambda}^i}{ds^m}\frac{ds^m}{dq^l}\frac{dq^l}{d\dot{\lambda}^k}$$$ ------ (3)

where $$\underline{T}$$$, $$s^m$$$ and $$q^l$$$are the PK2 stress, strength and state variables. The Jacobian is assembled in the material class automatically based on the coupled variables in each of the UserObjects. See the computeDerivative arguments in the UserObject Classes. The available base classes of UserObjects are as follows: 1) HEVPFlowRateUOBase (.C and .h): Calculate flow rate, direction, and, scalar such as d.flow_rate/d.strength and tensor derivative such as d.flow_rate/d.PK2. The flow rate and direction is used in residual construction while the derivatives are used for Jacobian. In HEVPFlowRatePowerLawJ2 (.C and .h), a power law flow rate model with d.J$$_2$$$/d$$\underline{\sigma}$$$has been implemented. 2) HEVPInternalVarRateUOBase (.C and .h): Calculate rates of state (internal) variables. Based on J$$_2$$$ flow model, 'HEVPEqvPlasticStrainRate' (.C and .h) has been implemented.

3) HEVPInternalVarUOBase (.C and .h): Update state (internal) variables following

$$q_{n+1}=q_{n}+\dot{q}\Delta t$$$------- (4) where n+1 and n are the current and old increments, respectively. The $$\dot{q}$$$ is obtained from HEVPInternalVarRateUOBase type UserObjects. Based on J$$_2$$$flow model, 'HEVPEqvPlasticStrain' (.C and .h) has been implemented. 4) HEVPStrengthUOBase (.C and .h): Calculates strength that can be a function of internal variables. HEVPRambergOsgoodHardening and HEVPLinearHardening (.C and .h) has been implemented. Both these UserObjects are functions of equivalent plastic strain. UserObject classes 2 to 4, have functions computeValue and computeDerivative that are used in residual and Jacobian evaluations respectively. Sub-stepping A sub-stepping algorithm has been implemented to perform constitutive updates with a smaller time-step and deformation increment than used in the global-solve. Both the time step and deformation gradient is reduced by half if convergence at the constitutive level is not achieved. This allows the use of larger time steps to solve the nodal variables. Results The J$$_2$$$ model has been verified with ABAQUS hypoelastic viscoplastic for uniaxial tension and shown here.

To add other flow models, the user needs to inherit from the UserObject base or the J$$_2$$$model classes mentioned above and modify the computeValue() and computeDerivative() functions. The material class is not required to be modified if only new flow, internal variable (rates) and strength laws are to be implemented. Any other addition may require a derived material class from FiniteStrainHyperElasticViscoPlastic (See HyperElasticPhaseFieldIsoDamage where a non-linear damage variable is coupled to the viscoplastic model and the elastic energy is calculated to propagate damage). Couple properties to UserObjects: To couple properties to UserObjects, add params.addParam[HTML_REMOVED]("name", "Name of variable or property to couple"); in InputParameters .. and _name(getParam[HTML_REMOVED]("name")), _variable(getMaterialPropertyByName[HTML_REMOVED](_name)) in the constructor. (See the UserObject classes (.C and .h)) The current implementation allows the use of multiple state variables to determine flow rates. An example can be the rate-dependent Gurson model. References For more details on the Hyperelastic Viscoplastic J$$_2$$$ model ---"Nonlinear Finite Elements for Continua and Structures", Belytschko, Liu, Moran - Chapter on Constitutive models, Sub-section Hyperelastic-plastic models