- compressive_damage_at_max_compressive_strengthdamage at maximum compressive strength
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:damage at maximum compressive strength
- dilatancy_factorcontrols the dilation of concrete
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:controls the dilation of concrete
- maximum_strength_in_compressionAbsolute maximum compressive strength
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Absolute maximum compressive strength
- smoothing_tolIntersections of the yield surfaces will be smoothed by this amount (this is measured in units of stress). Often this is related to other physical parameters (eg, 0.1*cohesion) but it is important to set this small enough so that the individual yield surfaces do not mix together in the smoothing process to produce a result where no stress is admissible (for example, mixing together tensile and compressive failure envelopes).
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Intersections of the yield surfaces will be smoothed by this amount (this is measured in units of stress). Often this is related to other physical parameters (eg, 0.1*cohesion) but it is important to set this small enough so that the individual yield surfaces do not mix together in the smoothing process to produce a result where no stress is admissible (for example, mixing together tensile and compressive failure envelopes).
- tensile_damage_at_half_tensile_strengthfraction of the elastic recovery slope in tension at 0.5*ft0 after yielding
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:fraction of the elastic recovery slope in tension at 0.5*ft0 after yielding
- tip_smootherSmoothing parameter: the cone vertex at mean = cohesion*cot(friction_angle), will be smoothed by the given amount. Typical value is 0.1*cohesion
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Smoothing parameter: the cone vertex at mean = cohesion*cot(friction_angle), will be smoothed by the given amount. Typical value is 0.1*cohesion
- yield_function_tolThe return-map process will be deemed to have converged if all yield functions are within yield_function_tol of zero. If this is set very low then precision-loss might be encountered: if the code detects precision loss then it also deems the return-map process has converged.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The return-map process will be deemed to have converged if all yield functions are within yield_function_tol of zero. If this is set very low then precision-loss might be encountered: if the code detects precision loss then it also deems the return-map process has converged.
Damage Plasticity Model
The Lee (1996) model accounts for the independent damage in tension and compression. It also accounts for degradation of the elastic modulus of the concrete as the loading goes beyond yielding in either tension or compression. The model uses the incremental theory of plasticity and decomposes the total strain, , into elastic strain, , and plastic strain, , as follows (1) where bold symbol represents a vectoral or tensorial quantity. The relation between elastic strain and the stress, , is given by (2) where is the elasticity tensor. Using Eq. (1) and Eq. (2), the relation between and is expressed as Since the model considers the effect of damage in elastic stiffness, an effective stress, , is defined, where the stress for a given strain always corresponds to the undamaged elastic stiffness of the material, The relation between , , and is given by To consider the degradation of reinforced-concrete structures, an isotropic damage was considered in concrete material. Hence, the relation between and can be established by the isotropic scalar degradation damage variable, D, as follows (3) (4) The Damage Plasticity Model has various attributes to define the mechanical behavior of concrete in tension and compression such as the yield function, plastic potential, strength of material in tension and compression, and hardening and softening of the yield surface. These attributes are discussed in detail in the following sections. A method for the implementation of the Damage Plasticity Model and for the estimation of crack width are also presented in the upcoming sections.
Yield Function
The yield function, is a function of , the strength of the material in uniaxial tension, , and the strength of the material in uniaxial compression, . It was used to describe the admissible stress space. For this implementation, the yield function in stress space is defined as follows (5) where and is first invariant of stress and second invariant of the deviatoric component of the stress, respectively, is the Macaulay bracket function, is algebraically maximum principal stress, is a parameter that relates uniaxial, , and biaxial, , yield strength of concrete in compression, is a parameter that relates tensile, , and compressive, , yield strength which are function of a vector of damage variable, and and are the damage variables in tension and compression, respectively.
The implementation first solves the given problem in the effective stress space and then transforms the effective stress to stress space using Eq. (4). Thus, the yield strength of the concrete under uniaxial loading is expressed as effective yield strength as follows (6) (7) where and are the yield strength of the concrete in tension and compression, respectively and and are the degradation damage variables in tension and compression, respectively such that and . The scalar degradation damage variable is expressed in terms of and as follows (8) Hence, for uniaxial tension, , while for uniaxial compression, . The yield strength for multi-axial loading, i.e., Eq. (6) and Eq. (7), can be rewritten as (9) (10) Similarly, the first invariant of , , and second invariant of the deviatoric component of , , can be rewritten in terms of and as follows (11) (12) The maximum principal effective stress is expressed in the terms of as follows (13) Consequently, yield function is a homogenous function, i.e., Hence, using Eq. (9) and Eq. (13), the yield function in the effective stress space was obtained by multiplying by a factor of both sides of Eq. (5), as follows (14)
Plastic Potential
It was found that for concrete, the Drucker-Prager flow rule describes the experimentally observed volumetric expansion of the material as opposed to the Von-Mises flow rule, which results in no volumetric expansion (Krabbenhøft (2002)). Since all the equations are solved in the effective stress space, the plastic flow potential is also defined in the effective stress space (Lee (1996)) as follows (15) where is the plastic potential function, is the deviatoric component of the , and is norm of is a parameter that controls the dilatancy of concrete, and is the plastic consistency parameter.
Strength Function
Since the concrete shows strain-softening in tension and strain hardening and softening in compression, the concrete strength is expressed as a combination of two exponential functions as follows (16) where is the initial yield stress of the material, , for the uniaxial tension, , for uniaxial compression, and , are the material constants that describe the softening and hardening behavior of the concrete. Similarly, the degradation of the elastic modulus is also expressed as another exponential function as follows (17) where is a constant that determine the rate of degradation of with the increase in plastic strain. The strength of the material in the effective stress space was obtained using Eq. (9), Eq. (10), Eq. (16), and Eq. (17), as follows (18) The damage variable, is defined as (19) where is the fracture energy density during the process of cracking, which is derived from the fracture energy, , which is a material property. The relation between and is expressed as follows (20) where is characteristic length or the size of the deformation localization zone. Thus, the plastic strain can be presented in terms of damage variable as follows (21) where . Using Eq. (16) and Eq. (21), the strength of the concrete can be expressed in terms of the damage variable as follows (22) Thus, the strength of the material and degradation damage variable in the effective stress space can be written as
(23) (24) where , ,and are the modeling parameters, which are evaluated from the material properties. Since the maximum compressive strength of concrete, , was used as a material property, was obtained in terms of by finding maximum value of compressive strength in Eq. (18) as follows (25) Thus, can be expressed as follows (26) Similarly, if and are known then can be expressed in term of known quantities as follows (27) A relationship between and is written as follows (28) Lubliner et al. (1989) suggested that if the slope of versus curve is known at , then another relationship between and will be obtained as follows (29) Thus, was obtained using Eq. (28)-Eq. (29) as follows (30) To obtain a real value of , the quantity inside the square root must be 0. Therefore, the minimum possible slope of the versus curve is , which is a function of the characteristic length in tension. Therefore, a mesh independent slope parameter , is defined such that (31) Using Eq. (30) and Eq. (31), is rewritten as follows (32)
Note that is a fitting parameter that must be provided by the user.
The ratio of was obtained by specifying degradation values for uniaxial compression case from experiments. If the degradation in the elastic modulus is known, denoted as , when the concrete is unloaded from , then will be obtained using the following relation (33) (34) Similarly, if degradation in the elastic modulus is known, denoted as , when the material is unloaded from , on softening branch, then will be obtained using the following relation (35) (36) Thus, material modeling parameters ,, and were obtained, which were used in defining the strength of concrete in both tension and compression as given in Eq. (23). These parameters are also used to define the degradation damage variable in both tension and compression as indicated in Eq. (24).
Hardening Potential
The vector of two damage variables, , was used in the implementation as the state variable to store the state of damage in tension and compression, separately. The evolution of these damage variables is defined in terms of the hardening potential, , as (37) The evolution of the damage variable is expressed in terms of the evolution of as follows (38) where is dissipated energy density during the process of cracking. The scalar , is extended to multi-dimensional case as follows (39) where is the Dirac delta function and are eigenvalues of the , (40) and are the maximum and minimum principal plastic strain, respectively. From Eq. (38) - Eq. (40), the evolution of was obtained as (41) where (42) and ‘:’ represents products of two matrices. Hence, in Eq. (37) was obtained as follows (43) where ‘’ represents the dot product of a matrix and a vector, and is the gradient with respect to principal effective stress components, . Thus, the hardening potential that governs the evolution of damage variables is expressed in terms of effective stress space.
Return Mapping Algorithm
Return mapping algorithm is summarized in a flowchart Figure 1. For given strain increment and previous state of stress, trial effective stress is obtained by elastic increment in the elastic predictor step according to (44) If the state of trial effective stress lies inside the admissible domain, i.e, , the trial effective stress is considered as an admissible effective stress and old damage variables are supplied for the next step. If the state of trial effective stress is outside admissible domain, i.e, , the effective stress is obtained using the plastic corrector step

Figure 1: Flow chart for return mapping algorithm.
(45) Once admissible effective stress is obtained, degradation corrector step is utilized to account for the stiffness degradation on the state of stress according to (46)
During the plastic corrector step, the returned effective stress should satisfy the Kuhn-Tucker conditions on the and , according to (47) Per the flow rule in Eq. (15), the plastic corrector step, i.e., Eq. (45) can be rewritten as (48) where is the shear modulus and is the bulk modulus. After separating the volumetric and deviatoric components from Eq. (48) the following relations can be obtained (49) (50) Using Eq. (49) and Eq. (50), Eq. (48) can be written as (51)
is calculated as:
(52)
The plastic parameter, Eq. (52), is evaluated during each iteration of the return mapping algorithm as the current stress is being updated.
Input Parameters
- admissible_stressA single admissible value of the value of the stress parameters for internal parameters = 0. This is used to initialize the return-mapping algorithm during the first nonlinear iteration. If not given then it is assumed that stress parameters = 0 is admissible.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:A single admissible value of the value of the stress parameters for internal parameters = 0. This is used to initialize the return-mapping algorithm during the first nonlinear iteration. If not given then it is assumed that stress parameters = 0 is admissible.
- base_nameOptional parameter that defines a prefix for all material properties related to this stress update model. This allows for multiple models of the same type to be used without naming conflicts.
C++ Type:std::string
Controllable:No
Description:Optional parameter that defines a prefix for all material properties related to this stress update model. This allows for multiple models of the same type to be used without naming conflicts.
- biaxial_uniaxial_compressive_stress_factor0.1Material parameter that relate biaxial and uniaxial compressive strength, i.e., \alfa = (fb0-fc0)/(2*fb0-fc0)
Default:0.1
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Material parameter that relate biaxial and uniaxial compressive strength, i.e., \alfa = (fb0-fc0)/(2*fb0-fc0)
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- boundaryThe list of boundaries (ids or names) from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The list of boundaries (ids or names) from the mesh where this object applies
- constant_onNONEWhen ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped
Default:NONE
C++ Type:MooseEnum
Controllable:No
Description:When ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped
- declare_suffixAn optional suffix parameter that can be appended to any declared properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any declared properties. The suffix will be prepended with a '_' character.
- fracture_energy_in_compressionFracture energy of concrete in uniaxial compression
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Fracture energy of concrete in uniaxial compression
- fracture_energy_in_tensionFracture energy of concrete in uniaxial tension
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Fracture energy of concrete in uniaxial tension
- ft_ep_slope_factor_at_zero_epslope of ft vs plastic strain curve at zero plastic strain
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:slope of ft vs plastic strain curve at zero plastic strain
- max_NR_iterations20Maximum number of Newton-Raphson iterations allowed during the return-map algorithm
Default:20
C++ Type:unsigned int
Controllable:No
Description:Maximum number of Newton-Raphson iterations allowed during the return-map algorithm
- min_step_size1In order to help the Newton-Raphson procedure, the applied strain increment may be applied in sub-increments of size greater than this value. Usually it is better for Moose's nonlinear convergence to increase max_NR_iterations rather than decrease this parameter.
Default:1
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:In order to help the Newton-Raphson procedure, the applied strain increment may be applied in sub-increments of size greater than this value. Usually it is better for Moose's nonlinear convergence to increase max_NR_iterations rather than decrease this parameter.
- perfect_guessTrueProvide a guess to the Newton-Raphson proceedure that is the result from perfect plasticity. With severe hardening/softening this may be suboptimal.
Default:True
C++ Type:bool
Controllable:No
Description:Provide a guess to the Newton-Raphson proceedure that is the result from perfect plasticity. With severe hardening/softening this may be suboptimal.
- perform_finite_strain_rotationsFalseTensors are correctly rotated in finite-strain simulations. For optimal performance you can set this to 'false' if you are only ever using small strains
Default:False
C++ Type:bool
Controllable:No
Description:Tensors are correctly rotated in finite-strain simulations. For optimal performance you can set this to 'false' if you are only ever using small strains
- stiff_recovery_factor0stiffness recovery factor
Default:0
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:stiffness recovery factor
- warn_about_precision_lossFalseOutput a message to the console every time precision-loss is encountered during the Newton-Raphson process
Default:False
C++ Type:bool
Controllable:No
Description:Output a message to the console every time precision-loss is encountered during the Newton-Raphson process
- yield_function_toleranceIf the yield function is less than this amount, the (stress, internal parameters) are deemed admissible. A std::vector of tolerances must be entered for the multi-surface case
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:If the yield function is less than this amount, the (stress, internal parameters) are deemed admissible. A std::vector of tolerances must be entered for the multi-surface case
- yield_strength_in_compressionAbsolute yield compressice strength
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Absolute yield compressice strength
- yield_strength_in_tensionTensile yield strength of concrete
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Tensile yield strength of concrete
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Controllable:No
Description:The seed for the master random number generator
- smoother_function_typecosType of smoother function to use. 'cos' means (-a/pi)cos(pi x/2/a), 'polyN' means a polynomial of degree 2N+2
Default:cos
C++ Type:MooseEnum
Controllable:No
Description:Type of smoother function to use. 'cos' means (-a/pi)cos(pi x/2/a), 'polyN' means a polynomial of degree 2N+2
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
- output_propertiesList of material properties, from this material, to output (outputs must also be defined to an output type)
C++ Type:std::vector<std::string>
Controllable:No
Description:List of material properties, from this material, to output (outputs must also be defined to an output type)
- outputsnone Vector of output names where you would like to restrict the output of variables(s) associated with this object
Default:none
C++ Type:std::vector<OutputName>
Controllable:No
Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object
Outputs Parameters
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Material Property Retrieval Parameters
References
- KRISTIAN Krabbenhøft.
Basic computational plasticity.
University of Denmark, 2002.[BibTeX]
- Jeeho Lee.
Theory and implementation of plastic-damage model for concrete structures under cyclic and dynamic loading.
PhD thesis, University of California, Berkeley, 1996.[BibTeX]
- Jacob Lubliner, Javier Oliver, Sand Oller, and EJIJos Onate.
A plastic-damage model for concrete.
International Journal of solids and structures, 25(3):299–326, 1989.[BibTeX]