- displacementsThe displacements appropriate for the simulation geometry and coordinate system
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The displacements appropriate for the simulation geometry and coordinate system
- max_bond_stressMaximum bond stress
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Maximum bond stress
- penaltyPenalty parameter used in constraint enforcement for kinematic and penalty formulations.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Penalty parameter used in constraint enforcement for kinematic and penalty formulations.
- primaryprimary block id
C++ Type:SubdomainName
Controllable:No
Description:primary block id
- primary_variableThe variable on the primary side of the domain
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The variable on the primary side of the domain
- rebar_radiusRadius of the rebar
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Radius of the rebar
- secondarysecondary block id
C++ Type:SubdomainName
Controllable:No
Description:secondary block id
- transitional_slip_valueTransition between loading and frictional slip
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Transition between loading and frictional slip
- variableThe name of the variable that this residual object operates on
C++ Type:NonlinearVariableName
Unit:(no unit assumed)
Controllable:No
Description:The name of the variable that this residual object operates on
ADRebarBondSlipConstraint / RebarBondSlipConstraint
Constraint using a physical model to enforce the bond-slip behavior between concrete and rebar.
ADRebarBondSlipConstraint
implements a node-to-element constraint designed to apply the bond-slip relations between concrete and reinforcement bars. The rebar node is always "secondary" with the concrete element being the "primary". It uses a bond-slip model that assigns bond stress based on the slip values calculated as the relative displacement between concrete and rebar.
The ADRebarBondSlipConstraint
is recommended as the nonAD version, RebarBondSlipConstraint
, as currently implemented does not have an exact Jacobian, potentially leading to convergence issues that can be be resolved by using the ADRebarBondSlipConstraint
. There is also very little overhead or input file syntax change required for using ADRebarBondSlipConstraint
as the AD terms are limited to the constraint blocks as shown in Listing 1.
ADRebarBondSlipConstraint
only works for PENALTY formulationEqualValueEmbeddedConstraint / ADEqualValueEmbeddedConstraint provides an explaination on why KINEMATIC formulation does not work.
Two bond-slip models have been implemented. The default model selected by "bondslip_model"=concrete_rebar_model
is the nonlinear model from Mehlhorn et al. (1985) fit to experimental concrete rebar data and given as
where, is the bond stress, is the "max_bond_stress" related to the compressive strength of the concrete, is the slip calculated as the relative displacement between the concrete and rebar in the axial direction of the rebar, and is the "transitional_slip_value" at which the maximum bond stress is reached. The "rebar_radius" is also required by this model to convert the bond stress to a constraint force.
The second bond-slip model is an elastic perfect plastic version of the nonlinear model. The initial slip of the rebar-concrete bond is a linear function of stress. Linear slip continues up to "max_bond_stress" and "transitional_slip_value". After max_bond_stress
is reached, additional slip occurs at a constant force. Unloading follows the slope of the linear loading curve. This model is selected by "bondslip_model"=elastic_perfect_plastic_model
.
Information on the bond-slip model's behavior can be written to AuxVariable
through the "output_axial_slip", "output_axial_force", and "output_axial_plastic_slip" parameters. "output_axial_slip" is the total amount of slip in the constraint and "output_axial_plastic_slip" is the plastic component of the slip.
Example Input File Syntax
Listing 1: Example usage of ADRebarBondSlipConstraint. Note the AD terms are limited to the constraint and do not show up in other blocks.
[Constraints<<<{"href": "../../syntax/Constraints/index.html"}>>>]
[rebar_x]
type = ADRebarBondSlipConstraint<<<{"description": "Constraint using a physical model to enforce the bond-slip behavior between concrete and rebar.", "href": "RebarBondSlipConstraint.html"}>>>
secondary<<<{"description": "secondary block id"}>>> = 2
primary<<<{"description": "primary block id"}>>> = 1
penalty<<<{"description": "Penalty parameter used in constraint enforcement for kinematic and penalty formulations."}>>> = 1e10
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'disp_x'
primary_variable<<<{"description": "The variable on the primary side of the domain"}>>> = 'disp_x'
max_bond_stress<<<{"description": "Maximum bond stress"}>>> = 1e6
transitional_slip_value<<<{"description": "Transition between loading and frictional slip"}>>> = 5e-5
rebar_radius<<<{"description": "Radius of the rebar"}>>> = 2.00e-4
formulation<<<{"description": "Formulation used to enforce the constraint"}>>> = PENALTY
bondslip_model<<<{"description": "Node-Element bond slip model."}>>> = concrete_rebar_model
output_axial_slip<<<{"description": "Rebar axial slip output variable."}>>> = output_axial_slipx
output_axial_force<<<{"description": "Rebar axial force output variable"}>>> = output_axial_forcex
output_axial_plastic_slip<<<{"description": "Rebar axial plastic component of bond slip"}>>> = output_axial_plastic_slipx
[]
[]
(blackbear/test/tests/rebar_bondslip/RCBeam_elastic_constraint_45Deg.i)Input Parameters
- bondslip_modelelastic_perfect_plastic_modelNode-Element bond slip model.
Default:elastic_perfect_plastic_model
C++ Type:MooseEnum
Controllable:No
Description:Node-Element bond slip model.
- formulationkinematicFormulation used to enforce the constraint
Default:kinematic
C++ Type:MooseEnum
Controllable:No
Description:Formulation used to enforce the constraint
- matrix_onlyFalseWhether this object is only doing assembly to matrices (no vectors)
Default:False
C++ Type:bool
Controllable:No
Description:Whether this object is only doing assembly to matrices (no vectors)
- output_axial_forceRebar axial force output variable
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Rebar axial force output variable
- output_axial_plastic_slipRebar axial plastic component of bond slip
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Rebar axial plastic component of bond slip
- output_axial_slipRebar axial slip output variable.
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Rebar axial slip output variable.
Optional Parameters
- absolute_value_vector_tagsThe tags for the vectors this residual object should fill with the absolute value of the residual contribution
C++ Type:std::vector<TagName>
Controllable:No
Description:The tags for the vectors this residual object should fill with the absolute value of the residual contribution
- extra_matrix_tagsThe extra tags for the matrices this Kernel should fill
C++ Type:std::vector<TagName>
Controllable:No
Description:The extra tags for the matrices this Kernel should fill
- extra_vector_tagsThe extra tags for the vectors this Kernel should fill
C++ Type:std::vector<TagName>
Controllable:No
Description:The extra tags for the vectors this Kernel should fill
- matrix_tagssystemThe tag for the matrices this Kernel should fill
Default:system
C++ Type:MultiMooseEnum
Controllable:No
Description:The tag for the matrices this Kernel should fill
- vector_tagsnontimeThe tag for the vectors this Kernel should fill
Default:nontime
C++ Type:MultiMooseEnum
Controllable:No
Description:The tag for the vectors this Kernel should fill
Contribution To Tagged Field Data 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
- search_methodnearest_node_connected_sidesChoice of search algorithm. All options begin by finding the nearest node in the primary boundary to a query point in the secondary boundary. In the default nearest_node_connected_sides algorithm, primary boundary elements are searched iff that nearest node is one of their nodes. This is fast to determine via a pregenerated node-to-elem map and is robust on conforming meshes. In the optional all_proximate_sides algorithm, primary boundary elements are searched iff they touch that nearest node, even if they are not topologically connected to it. This is more CPU-intensive but is necessary for robustness on any boundary surfaces which has disconnections (such as Flex IGA meshes) or non-conformity (such as hanging nodes in adaptively h-refined meshes).
Default:nearest_node_connected_sides
C++ Type:MooseEnum
Controllable:No
Description:Choice of search algorithm. All options begin by finding the nearest node in the primary boundary to a query point in the secondary boundary. In the default nearest_node_connected_sides algorithm, primary boundary elements are searched iff that nearest node is one of their nodes. This is fast to determine via a pregenerated node-to-elem map and is robust on conforming meshes. In the optional all_proximate_sides algorithm, primary boundary elements are searched iff they touch that nearest node, even if they are not topologically connected to it. This is more CPU-intensive but is necessary for robustness on any boundary surfaces which has disconnections (such as Flex IGA meshes) or non-conformity (such as hanging nodes in adaptively h-refined meshes).
- 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
- 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
References
- G. Mehlhorn, J. Kollegger, M. Keuser, and W. Kolmar.
Nonlinear contact problems - a finite element approach implemented in ADINA.
Computers and Structures, 21():69–80, 1985.[BibTeX]