diff --git a/doc/content/bib/blackbear.bib b/doc/content/bib/blackbear.bib index fdecc69e..0ae72feb 100644 --- a/doc/content/bib/blackbear.bib +++ b/doc/content/bib/blackbear.bib @@ -75,3 +75,21 @@ @Article{wald_2017 Title = {Development and multiaxial distribution of expansions in reinforced concrete elements affected by alkali--silica reaction}, Volume = {18}, Year = {2017}} + +@article{bondlsip_adina_1985, + Author = {Mehlhorn, G. and Kollegger, J. and Keuser, M. and Kolmar, W.}, + Journal = {Computers and Structures}, + Number = {}, + Pages = {69--80}, + Title = {Nonlinear Contact Problems - A Finite Element Approach Implemented in ADINA}, + Volume = {21}, + Year = {1985}} + +@article{hameed_2013, + Author = {Hameed, R. and Turatsinze, A. and Duprat, F. and Sellier A. }, + Journal = {KSCE:Journal of Civil Engineering}, + Month = jan, + Pages = {1700--1701}, + Title = {Bond stress-slip Behavior of Reinforcing Bars Embedded in Hybrid Fiber-reinforced Concrete}, + Volume = {17}, + Year = {2013}} diff --git a/doc/content/source/constraints/RebarBondSlipConstraint.md b/doc/content/source/constraints/RebarBondSlipConstraint.md new file mode 100644 index 00000000..8a301384 --- /dev/null +++ b/doc/content/source/constraints/RebarBondSlipConstraint.md @@ -0,0 +1,24 @@ +# RebarBondSlipConstraint + +!syntax description /Constraints/RebarBondSlipConstraint + +`RebarBondSlipConstraint` implements a node-to-element constraint designed to apply the bond-slip relations between concrete and reinforcement bars. It uses a simplistic bond-slip model that assigns bond stress based on the slip values calculated as the relative displacement between concrete and rebar: +\begin{equation} + \begin{aligned} + \sigma_s = & \sigma_{max} \left[ 0.5 \left(\frac{\Delta}{\Delta_1}\right) \, - \, 4.5 \, \left(\frac{\Delta}{\Delta_1}\right)^2 \, + \, 1.4 \, \left(\frac{\Delta}{\Delta_1}\right)^3 \right] \; \mathrm{for} \, \Delta < \Delta_1 \, \, \\ + = & 1.9 \, \sigma_{max} \; \mathrm{for} \, \Delta >= \Delta_1 + \end{aligned} +\end{equation} +Here, $\sigma_s$ is the bondstress, $\sigma_{max}$ is the maximum bondstress related to the compressive strength of the concrete, $\Delta$ is the slip calculated as the relative displacement between the concrete and rebar in the axial direction of the rebar, and $\Delta_1$ is the slip magnitude at which the maximum bondstress is reached. This model is similar to what was implemented in [!cite](bondlsip_adina_1985). + +## Example Input File Syntax + +!listing rebar_bondslip/RCBeam_constraint.i block=Constraints + +!syntax parameters /Constraints/RebarBondSlipConstraint + +!syntax inputs /Constraints/RebarBondSlipConstraint + +!syntax children /Constraints/RebarBondSlipConstraint + +!bibtex bibliography diff --git a/include/constraints/RebarBondSlipConstraint.h b/include/constraints/RebarBondSlipConstraint.h index 3ac60e8c..2cf43ff8 100644 --- a/include/constraints/RebarBondSlipConstraint.h +++ b/include/constraints/RebarBondSlipConstraint.h @@ -17,8 +17,10 @@ class RebarBondSlipConstraint; template <> InputParameters validParams(); - -/// A RebarBondSlipConstraint enforces concrete-rebar constraint +/** + * A RebarBondSlipConstraint enforces the constraint between concrete and + * reinforcing bars establishing a slip vs. bondstress relationship + */ class RebarBondSlipConstraint : public EqualValueEmbeddedConstraint { public: @@ -40,14 +42,24 @@ class RebarBondSlipConstraint : public EqualValueEmbeddedConstraint bool getCoupledVarComponent(unsigned int var_num, unsigned int & component); protected: + /// method to calculate the tangential and the normal direction for the rebars virtual void computeTangent(); + virtual Real computeQpResidual(Moose::ConstraintType type) override; virtual Real computeQpJacobian(Moose::ConstraintJacobianType type) override; virtual Real computeQpOffDiagJacobian(Moose::ConstraintJacobianType type, unsigned int jvar) override; /** - * Struct designed to hold info about the bonds slip history + * Struct designed to hold info about the bond-slip history + * slip_min miminum slip value at the current step + * slip_max maximum slip value at the current step + * slip_min_old minimum slip value from the history + * slip_max_old maximum slip value from the history + * bondstress_min miminum bondstress value at the current step + * bondstress_max maximum bondstress value at the current step + * bondstress_min_old minimum bondstress value from the history + * bondstress_max_old maximum bondstress value from the history */ struct bondSlipData { @@ -60,6 +72,7 @@ class RebarBondSlipConstraint : public EqualValueEmbeddedConstraint Real bondstress_min_old; Real bondstress_max_old; + /// initializing the bond-slip data bondSlipData() : slip_min(0.0), slip_max(0.0), @@ -73,29 +86,55 @@ class RebarBondSlipConstraint : public EqualValueEmbeddedConstraint } }; - // Bond-slip data + /// storing the bond-slip history values for each of the nodes std::map _bondslip; + /// the direction in which the constraint works const unsigned _component; + + /// problem dimesion const unsigned int _mesh_dimension; + + /// displacement variables std::vector _var_nums; std::vector _vars; + /// flag to turn on printing values for debugging const bool _debug; + /// maximum bond stress const Real _max_bondstress; + + /// residual bond stress due to friction after joint failure const Real _frictional_bondstress; + + /// ultimate slip value attainable before failure const Real _ultimate_slip; + + /// radius of the reinforcing bars const Real _bar_radius; + + /// slip values at the transition points of the bond-slip curve std::vector _transitional_slip; + /// constraint force needed to enforce the constraint RealVectorValue _constraint_residual; + + /// constraint force needed to enforce the constraint RealVectorValue _constraint_jacobian_axial; + /// penalty force for the current constraint RealVectorValue _pen_force; + + /// tangent direction for the rebars RealVectorValue _secondary_tangent; + + /// current element volume/length for the rabar Real _current_elem_volume; - bool _bond; + + /// bond stress value Real _bond_stress; + + /// redivative of the bond stress function w.r.t slip Real _bond_stress_deriv; }; diff --git a/src/constraints/RebarBondSlipConstraint.C b/src/constraints/RebarBondSlipConstraint.C index 0180ba26..d85416cd 100644 --- a/src/constraints/RebarBondSlipConstraint.C +++ b/src/constraints/RebarBondSlipConstraint.C @@ -25,7 +25,7 @@ RebarBondSlipConstraint::validParams() { InputParameters params = EqualValueEmbeddedConstraint::validParams(); params.addClassDescription( - "This is a constraint enforcing the bodslip behavior between concrete and rebar"); + "This is a constraint enforcing the bod-slip behavior between concrete and rebar"); params.addRequiredParam("component", "An integer corresponding to the direction " "the variable this kernel acts in. (0 for x, " @@ -100,12 +100,11 @@ bool RebarBondSlipConstraint::shouldApply() { if (_debug) - if (_current_node->id() == 144) - { - std::cout << "===========================================\n"; - std::cout << "node id: " << _current_node->id() << std::endl; - std::cout << "at coord: " << (Point)*_current_node << std::endl; - } + { + std::cout << "===========================================\n"; + std::cout << "node id: " << _current_node->id() << std::endl; + std::cout << "at coord: " << (Point)*_current_node << std::endl; + } auto it = _secondary_to_primary_map.find(_current_node->id()); if (it != _secondary_to_primary_map.end()) @@ -157,8 +156,7 @@ RebarBondSlipConstraint::computeTangent() _current_elem_volume /= elems.size(); if (_debug) - if (_current_node->id() == 144) - std::cout << "tangent: " << _secondary_tangent << std::endl; + std::cout << "tangent: " << _secondary_tangent << std::endl; } void @@ -167,7 +165,6 @@ RebarBondSlipConstraint::reinitConstraint() computeTangent(); // Build up residual vector - RealVectorValue relative_disp; for (unsigned int i = 0; i < _mesh_dimension; ++i) relative_disp(i) = ((_vars[i]->dofValues())[0] - (_vars[i]->slnNeighbor())[0]); @@ -176,10 +173,9 @@ RebarBondSlipConstraint::reinitConstraint() RealVectorValue slip_axial = slip * _secondary_tangent; RealVectorValue slip_normal = relative_disp - slip_axial; Real slip_ratio = std::abs(slip) / _transitional_slip[0]; - // Real bond_stress; + if (_debug) - if (_current_node->id() == 144) - std::cout << "Slip = " << slip << ".\n"; + std::cout << "Slip = " << slip << ".\n"; const Node * node = _current_node; auto it = _bondslip.find(node->id()); @@ -190,17 +186,16 @@ RebarBondSlipConstraint::reinitConstraint() bond_slip.slip_max = std::max(bond_slip.slip_max_old, slip); if (_debug) - if (_current_node->id() == 144) - { - std::cout << "Slip_min = " << bond_slip.slip_min << ".\n"; - std::cout << "Slip_min_old = " << bond_slip.slip_min_old << ".\n"; - std::cout << "Slip_max = " << bond_slip.slip_max << ".\n"; - std::cout << "Slip_max_old = " << bond_slip.slip_max_old << ".\n"; - std::cout << "Bondstress_min = " << bond_slip.bondstress_min << ".\n"; - std::cout << "Bondstress_min_old = " << bond_slip.bondstress_min_old << ".\n"; - std::cout << "Bondstress_max = " << bond_slip.bondstress_max << ".\n"; - std::cout << "Bondstress_max_old = " << bond_slip.bondstress_max_old << ".\n"; - } + { + std::cout << "Slip_min = " << bond_slip.slip_min << ".\n"; + std::cout << "Slip_min_old = " << bond_slip.slip_min_old << ".\n"; + std::cout << "Slip_max = " << bond_slip.slip_max << ".\n"; + std::cout << "Slip_max_old = " << bond_slip.slip_max_old << ".\n"; + std::cout << "Bondstress_min = " << bond_slip.bondstress_min << ".\n"; + std::cout << "Bondstress_min_old = " << bond_slip.bondstress_min_old << ".\n"; + std::cout << "Bondstress_max = " << bond_slip.bondstress_max << ".\n"; + std::cout << "Bondstress_max_old = " << bond_slip.bondstress_max_old << ".\n"; + } Real slope = 5.0 * _max_bondstress / _transitional_slip[0]; Real plastic_slip_max = bond_slip.slip_max - bond_slip.bondstress_max / slope; @@ -212,10 +207,6 @@ RebarBondSlipConstraint::reinitConstraint() { if (std::abs(slip) < _transitional_slip[0]) { - if (_debug) - if (_current_node->id() == 144) - std::cout << "Calculating bondstress for Case Ia" - << ".\n"; _bond_stress = _max_bondstress * MathUtils::sign(slip) * (5.0 * slip_ratio - 4.5 * slip_ratio * slip_ratio + 1.4 * slip_ratio * slip_ratio * slip_ratio); @@ -225,37 +216,14 @@ RebarBondSlipConstraint::reinitConstraint() 1.4 * 3.0 * slip_ratio * slip_ratio / _transitional_slip[0]); } else if (slip >= _transitional_slip[0] && slip < _ultimate_slip) - { - if (_debug) - if (_current_node->id() == 144) - std::cout << "Calculating bondstress for Case Ib" - << ".\n"; _bond_stress = 1.9 * _max_bondstress; - } else if (slip <= -_transitional_slip[0] && slip > -_ultimate_slip) - { - if (_debug) - if (_current_node->id() == 144) - std::cout << "Calculating bondstress for Case Ic" - << ".\n"; _bond_stress = -1.9 * _max_bondstress; - } else - { - if (_debug) - if (_current_node->id() == 144) - std::cout << "Calculating bondstress for Case Id" - << ".\n"; _bond_stress = _frictional_bondstress * MathUtils::sign(slip); - } } else if (slip > plastic_slip_max && slip < bond_slip.slip_max) { - if (_debug) - if (_current_node->id() == 144) - std::cout << "Calculating bondstress for Case II" - << ".\n"; - _bond_stress = (slip - plastic_slip_max) * bond_slip.bondstress_max / (bond_slip.slip_max - plastic_slip_max); @@ -263,11 +231,6 @@ RebarBondSlipConstraint::reinitConstraint() } else if (slip < plastic_slip_min && slip > bond_slip.slip_min) { - if (_debug) - if (_current_node->id() == 144) - std::cout << "Calculating bondstress for Case III" - << ".\n"; - _bond_stress = (slip - plastic_slip_min) * bond_slip.bondstress_min / (bond_slip.slip_min - plastic_slip_min); _bond_stress_deriv = bond_slip.bondstress_min / (bond_slip.slip_min - plastic_slip_min); @@ -276,11 +239,10 @@ RebarBondSlipConstraint::reinitConstraint() _bond_stress = _frictional_bondstress; if (_debug) - if (_current_node->id() == 144) - { - std::cout << "Bondstress = " << _bond_stress << "\n"; - std::cout << "Bondstress Derivative = " << _bond_stress_deriv << "\n"; - } + { + std::cout << "Bondstress = " << _bond_stress << "\n"; + std::cout << "Bondstress Derivative = " << _bond_stress_deriv << "\n"; + } Real bond_force = 2.0 * libMesh::pi * _bar_radius * _current_elem_volume * _bond_stress; Real bond_force_deriv = @@ -292,14 +254,6 @@ RebarBondSlipConstraint::reinitConstraint() _constraint_residual = constraint_force_axial + constraint_force_normal; _constraint_jacobian_axial = bond_force_deriv * _secondary_tangent; - if (_debug) - if (_current_node->id() == 144) - { - std::cout << "Constraint Residual Axial = " << constraint_force_axial << "\n"; - std::cout << "Constraint Residual Normal = " << constraint_force_normal << "\n"; - std::cout << "Constraint Residual = " << _constraint_residual << "\n"; - } - bond_slip.bondstress_min = std::min(bond_slip.bondstress_min_old, _bond_stress); bond_slip.bondstress_max = std::max(bond_slip.bondstress_max_old, _bond_stress); diff --git a/test/tests/rebar_bondslip/RCBeam_constraint.i b/test/tests/rebar_bondslip/RCBeam_constraint.i index 4796f04b..efe874e3 100644 --- a/test/tests/rebar_bondslip/RCBeam_constraint.i +++ b/test/tests/rebar_bondslip/RCBeam_constraint.i @@ -76,7 +76,7 @@ type = RebarBondSlipConstraint secondary = 2 primary = 1 - penalty = 1e6 + penalty = 1e12 variable = 'disp_x' primary_variable = 'disp_x' component = 0 @@ -84,13 +84,13 @@ transitional_slip_values = 0.0005 ultimate_slip = 0.1 rebar_radius = 7.98e-3 - debug = true + # debug = true [] [rebar_y] type = RebarBondSlipConstraint secondary = 2 primary = 1 - penalty = 1e6 + penalty = 1e12 variable = 'disp_y' primary_variable = 'disp_y' component = 1 @@ -98,7 +98,7 @@ transitional_slip_values = 0.0005 ultimate_slip = 0.1 rebar_radius = 7.98e-3 - debug = true + # debug = true [] [] diff --git a/test/tests/rebar_bondslip/RCBeam_constraint_equal.i b/test/tests/rebar_bondslip/RCBeam_constraint_equal.i deleted file mode 100644 index ef557f4a..00000000 --- a/test/tests/rebar_bondslip/RCBeam_constraint_equal.i +++ /dev/null @@ -1,267 +0,0 @@ -[Mesh] - file = gold/RCBeam_test_mesh.e -[] - -[GlobalParams] - displacements = 'disp_x disp_y' - # volumetric_locking_correction = true -[] - -[Modules/TensorMechanics/Master] - [./Concrete_block] - block = 1 - # strain = small - strain = finite - incremental = true - # add_variables = true - generate_output = 'stress_xx stress_xy stress_yy strain_xx strain_xy strain_yy - max_principal_stress mid_principal_stress min_principal_stress - secondinv_stress thirdinv_stress vonmises_stress - secondinv_strain thirdinv_strain - elastic_strain_xx elastic_strain_xy elastic_strain_yy' -# plastic_strain_xx plastic_strain_xy plas tic_strain_xz plastic_strain_yy plastic_strain_yz plastic_strain_zz' - save_in = 'resid_x resid_y' - [../] -[] - -[Modules/TensorMechanics/LineElementMaster] - [./Reinforcement_block] - block = '2' - truss = true - area = area - displacements = 'disp_x disp_y' - save_in = 'resid_x resid_y' - # add_variables = true - [../] -[] - -[Variables] - [./disp_x] - [../] - [./disp_y] - [../] -[] - -[AuxVariables] - [./resid_x] - [../] - [./resid_y] - [../] - [./area] - order = CONSTANT - family = MONOMIAL - [../] - [./axial_stress] - order = CONSTANT - family = MONOMIAL - [../] -[] - -[AuxKernels] - [./area] - type = ConstantAux - block = '2' - variable = area - value = 2.00e-4 # 509 mm2 - execute_on = 'initial timestep_begin' - [../] - [./axial_stress] - type = MaterialRealAux - block = '2' - variable = axial_stress - property = axial_stress - [../] -[] - -[Constraints] - [./rebar_x2] - type = EqualValueEmbeddedConstraint - slave = 2 - master = 1 - penalty = 1e15 - variable = 'disp_x' - master_variable = 'disp_x' - formulation = penalty - [../] - [./rebar_y2] - type = EqualValueEmbeddedConstraint - slave = 2 - master = 1 - penalty = 1e15 - variable = 'disp_y' - master_variable = 'disp_y' - formulation = penalty - [../] -[] - -[Functions] - [./loading] - type = PiecewiseLinear - x = '0 10 20 30' - y = '0 0.0001 -0.0001 0.0' - [../] -[] - -[BCs] - [./loading] - type = FunctionDirichletBC - variable = disp_x - boundary = '102' - function = loading - preset = true - [../] - [./left_support_x] - type = DirichletBC - variable = disp_x - boundary = '100' - value = 0 - [../] - [./left_support_y] - type = DirichletBC - variable = disp_y - boundary = '100' - value = 0 - [../] -[] - -[Postprocessors] - [./deformation_x] - type = AverageNodalVariableValue - variable = disp_x - boundary = '101' - [../] - [./deformation_y] - type = AverageNodalVariableValue - variable = disp_y - boundary = '101' - [../] - [./react_x] - type = AverageNodalVariableValue - variable = resid_x - boundary = '100' - [../] - [./react_y] - type = AverageNodalVariableValue - variable = resid_y - boundary = '100' - [../] - [./react_x2] - type = AverageNodalVariableValue - variable = resid_x - boundary = '101' - [../] - [./react_y2] - type = AverageNodalVariableValue - variable = resid_y - boundary = '100' - [../] - - [./node1_fx] - type = NodalVariableValue - variable = resid_x - nodeid = 138 - [../] - [./node1_fy] - type = NodalVariableValue - variable = resid_y - nodeid = 138 - [../] - [./node1_dx] - type = NodalVariableValue - variable = disp_x - nodeid = 138 - [../] - [./node1_dy] - type = NodalVariableValue - variable = disp_y - nodeid = 138 - [../] - [./node1_fx2] - type = AverageNodalVariableValue - variable = resid_x - boundary = '102' - [../] - [./stress_xx] - type = ElementAverageValue - variable = stress_xx - block = '1' - [../] - [./strain_xx] - type = ElementAverageValue - variable = strain_xx - block = '1' - [../] - [./axial_stress] - type = ElementAverageValue - variable = axial_stress - block = '2' - [../] -[] - -[Materials] - [Cijkl_concrete] - type = ComputeIsotropicElasticityTensor - youngs_modulus = 500e6 - poissons_ratio = 0.2 - block = 1 - [] - [./isotropic_plasticity] - type = IsotropicPlasticityStressUpdate - yield_stress = 285788383.2488647 # = sqrt(3)*165e6 = sqrt(3) * yield in shear - hardening_constant = 0.0 - block = '1' - [../] - [./radial_return_stress] - type = ComputeMultipleInelasticStress - tangent_operator = elastic - inelastic_models = 'isotropic_plasticity' - block = '1' - [../] - # [truss] - # type = LinearElasticTruss - # block = '2 ' - # youngs_modulus = 2e11 - # [] - [./truss] - type = PlasticTruss - youngs_modulus = 2.0e11 - yield_stress = 500e5 - hardening_constant = 100 - block = '2' - outputs = exodus - [../] -[] - -[Preconditioning] - [./SMP] - type = SMP - full = true - [../] -[] - -[Executioner] - type = Transient - solve_type = 'PJFNK' - nl_max_its = 20 - nl_abs_tol = 1e-6 - nl_rel_tol = 1e-05 - l_tol = 1e-03 - - line_search = none - - petsc_options_iname = '-pc_type' - petsc_options_value = 'lu' - - petsc_options = '-snes_converged_reason' - - end_time = 30 - dtmin = 0.00001 - - dt = 0.1 -[] - - -[Outputs] - exodus = true - csv = true -[] diff --git a/test/tests/rebar_bondslip/RCBeam_constraint_test.i b/test/tests/rebar_bondslip/RCBeam_constraint_test.i deleted file mode 100644 index b1e25367..00000000 --- a/test/tests/rebar_bondslip/RCBeam_constraint_test.i +++ /dev/null @@ -1,279 +0,0 @@ -[Mesh] - file = gold/RCBeam_test_mesh.e -[] - -[GlobalParams] - displacements = 'disp_x disp_y' - # volumetric_locking_correction = true -[] - -[Modules/TensorMechanics/Master] - [./Concrete_block] - block = 1 - # strain = small - strain = finite - incremental = true - # add_variables = true - generate_output = 'stress_xx stress_xy stress_yy strain_xx strain_xy strain_yy - max_principal_stress mid_principal_stress min_principal_stress - secondinv_stress thirdinv_stress vonmises_stress - secondinv_strain thirdinv_strain - elastic_strain_xx elastic_strain_xy elastic_strain_yy' -# plastic_strain_xx plastic_strain_xy plas tic_strain_xz plastic_strain_yy plastic_strain_yz plastic_strain_zz' - save_in = 'resid_x resid_y' - [../] -[] - -[Modules/TensorMechanics/LineElementMaster] - [./Reinforcement_block] - block = '2' - truss = true - area = area - displacements = 'disp_x disp_y' - save_in = 'resid_x resid_y' - # add_variables = true - [../] -[] - -[Variables] - [./disp_x] - [../] - [./disp_y] - [../] -[] - -[AuxVariables] - [./resid_x] - [../] - [./resid_y] - [../] - [./area] - order = CONSTANT - family = MONOMIAL - [../] - [./axial_stress] - order = CONSTANT - family = MONOMIAL - [../] -[] - -[AuxKernels] - [./area] - type = ConstantAux - block = '2' - variable = area - value = 2.00e-4 - execute_on = 'initial timestep_begin' - [../] - [./axial_stress] - type = MaterialRealAux - block = '2' - variable = axial_stress - property = axial_stress - [../] -[] - -[Constraints] - [rebar_x] - type = RebarBondSlipConstraint - secondary = 2 - primary = 1 - penalty = 1e6 - variable = 'disp_x' - primary_variable = 'disp_x' - component = 0 - max_bondstress = 1e5 - transitional_slip_values = 0.00005 - ultimate_slip = 0.5 - rebar_radius = 7.98e-3 - frictional_bondstress = 100 - [] - [rebar_y] - type = RebarBondSlipConstraint - secondary = 2 - primary = 1 - penalty = 1e6 - variable = 'disp_y' - primary_variable = 'disp_y' - component = 1 - max_bondstress = 1e5 - transitional_slip_values = 0.00005 - ultimate_slip = 0.5 - rebar_radius = 7.98e-3 - frictional_bondstress = 100 - [] -[] - -[Functions] - [./loading] - type = PiecewiseLinear - x = '0 10 20 30 ' - y = '0 0.0001 -0.0001 0.0' - [../] -[] - -[BCs] - [./loading] - type = FunctionDirichletBC - variable = disp_x - boundary = '102' - function = loading - preset = true - [../] - [./left_support_x] - type = DirichletBC - variable = disp_x - boundary = '100' - value = 0 - [../] - [./left_support_y] - type = DirichletBC - variable = disp_y - boundary = '100' - value = 0 - [../] -[] - -[Postprocessors] - [./deformation_x] - type = AverageNodalVariableValue - variable = disp_x - boundary = '101' - [../] - [./deformation_y] - type = AverageNodalVariableValue - variable = disp_y - boundary = '101' - [../] - [./react_x] - type = AverageNodalVariableValue - variable = resid_x - boundary = '100' - [../] - [./react_y] - type = AverageNodalVariableValue - variable = resid_y - boundary = '100' - [../] - [./react_x2] - type = AverageNodalVariableValue - variable = resid_x - boundary = '101' - [../] - [./react_y2] - type = AverageNodalVariableValue - variable = resid_y - boundary = '100' - [../] - [./node1_fx] - type = NodalVariableValue - variable = resid_x - # boundary = '1001' - nodeid = 138 - [../] - [./node1_fy] - type = NodalVariableValue - variable = resid_y - nodeid = 138 - [../] - [./node1_dx] - type = NodalVariableValue - variable = disp_x - nodeid = 138 - [../] - [./node1_dy] - type = NodalVariableValue - variable = disp_y - nodeid = 138 - [../] - [./node1_fx2] - type = AverageNodalVariableValue - variable = resid_x - boundary = '102' - [../] - [./stress_xx] - type = ElementAverageValue - variable = stress_xx - block = '1' - [../] - [./strain_xx] - type = ElementAverageValue - variable = strain_xx - block = '1' - [../] - [./axial_stress] - type = ElementAverageValue - variable = axial_stress - block = '2' - [../] -[] - -[Materials] - [Cijkl_concrete] - type = ComputeIsotropicElasticityTensor - youngs_modulus = 500e6 - poissons_ratio = 0.2 - block = 1 - [] - [./isotropic_plasticity] - type = IsotropicPlasticityStressUpdate - yield_stress = 285788383.2488647 # = sqrt(3)*165e6 = sqrt(3) * yield in shear - hardening_constant = 0.0 - block = '1' - [../] - [./radial_return_stress] - type = ComputeMultipleInelasticStress - tangent_operator = elastic - inelastic_models = 'isotropic_plasticity' - block = '1' - [../] - # [truss] - # type = LinearElasticTruss - # block = '2' - # youngs_modulus = 2e11 - # [] - [./truss] - type = PlasticTruss - youngs_modulus = 2.0e11 - yield_stress = 500e5 - hardening_constant = 0 - block = '2' - outputs = exodus - [../] -[] - -[Preconditioning] - [./SMP] - type = SMP - full = true - [../] -[] - -[Executioner] - type = Transient - solve_type = 'PJFNK' - nl_max_its = 20 - nl_abs_tol = 1e-6 - nl_rel_tol = 1e-05 - l_tol = 1e-03 - - line_search = none - - petsc_options_iname = '-pc_type' - petsc_options_value = 'lu' - - petsc_options = '-snes_converged_reason' - - end_time = 30 - dtmin = 0.00001 - - dt = 0.1 -[] - - -[Outputs] - # print_linear_residuals = false - exodus = true - csv = true - # file_base = RCBeam_bondslip_test -[] diff --git a/test/tests/rebar_bondslip/concrete_rebar_bond_test.i b/test/tests/rebar_bondslip/concrete_rebar_bond_test.i deleted file mode 100644 index d9c97e5a..00000000 --- a/test/tests/rebar_bondslip/concrete_rebar_bond_test.i +++ /dev/null @@ -1,318 +0,0 @@ -[GlobalParams] - displacements = 'disp_x disp_y' -[] - -[Mesh] - file = gold/geo.e -[] - -[Variables] - [disp_x] - [] - [disp_y] - [] -[] - -# [Functions] -# [E] -# type = PiecewiseMultilinear -# data_file = 'gold/E.txt' -# [] -# [] - -[AuxVariables] - [stress_xx] - order = CONSTANT - family = MONOMIAL - [] - [stress_yy] - order = CONSTANT - family = MONOMIAL - [] - [strain_xx] - order = CONSTANT - family = MONOMIAL - [] - [strain_yy] - order = CONSTANT - family = MONOMIAL - [] - [area] - order = CONSTANT - family = MONOMIAL - [] - [damage_index] - order = CONSTANT - family = MONOMIAL - [] - [./axial_stress] - order = CONSTANT - family = MONOMIAL - [../] -[] - -[AuxKernels] - [stress_xx] - type = RankTwoAux - index_i = 0 - index_j = 0 - variable = stress_xx - execute_on = 'TIMESTEP_END' - rank_two_tensor = stress - block = 1 - [] - [stress_yy] - type = RankTwoAux - index_i = 1 - index_j = 1 - variable = stress_yy - execute_on = 'TIMESTEP_END' - rank_two_tensor = stress - block = 1 - [] - [strain_xx] - type = RankTwoAux - index_i = 0 - index_j = 0 - variable = strain_xx - execute_on = 'TIMESTEP_END' - rank_two_tensor = total_strain - block = 1 - [] - [strain_yy] - type = RankTwoAux - index_i = 1 - index_j = 1 - variable = strain_yy - execute_on = 'TIMESTEP_END' - rank_two_tensor = total_strain - block = 1 - [] - [area] - type = ConstantAux - block = 2 - variable = area - value = 7.07e-4 - execute_on = 'initial' - [] - [damage_index] - type = MaterialRealAux - variable = damage_index - property = damage_index - block = 1 - execute_on = timestep_end - [] - [./axial_stress] - type = MaterialRealAux - block = '2' - variable = axial_stress - property = axial_stress - [../] -[] - -[Materials] - [concrete_strain] - type = ComputeIncrementalSmallStrain - block = 1 - [] - [Cijkl_concrete] - type = ComputeIsotropicElasticityTensor - youngs_modulus = 500e6 - poissons_ratio = 0.2 - block = 1 - [] - [damage] - type = MazarsDamage - use_old_damage = true - tensile_strength = 1e6 - a_t = 0.87 - a_c = 0.65 - b_t = 20000 - b_c = 2150 - block = 1 - [] - [concrete_stress] - type = ComputeDamageStress - damage_model = damage - block = 1 - [] - # [concrete_stress] - # type = ComputeFiniteStrainElasticStress - # block = 1 - # [] - # [truss] - # type = LinearElasticTruss - # block = 2 - # youngs_modulus = 2e11 - # [] - [./truss] - type = PlasticTruss - youngs_modulus = 2.0e11 - yield_stress = 500e5 - hardening_constant = 100 - block = '2' - outputs = exodus - [../] -[] - -[Postprocessors] - [./stress_xx] - type = ElementAverageValue - variable = stress_xx - block = '1' - [../] - [./strain_xx] - type = ElementAverageValue - variable = strain_xx - block = '1' - [../] - [./stress_yy] - type = ElementAverageValue - variable = stress_yy - block = '1' - [../] - [./strain_yy] - type = ElementAverageValue - variable = strain_yy - block = '1' - [../] - [./axial_stress] - type = ElementAverageValue - variable = axial_stress - block = '2' - [../] -[] - -[Preconditioning] - [./SMP] - type = SMP - full = true - [../] -[] - -[Executioner] - type = Transient - solve_type = PJFNK - line_search = basic - # petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart -mat_mffd_type' - # petsc_options_value = 'hypre boomeramg 101 ds' - - # petsc_options_iname = '-pc_type -ksp_gmres_restart' - # petsc_options_value = 'jacobi 101' - petsc_options_iname = '-pc_type' - petsc_options_value = 'lu' - nl_rel_tol = 1e-5 - nl_abs_tol = 1e-6 - l_tol = 1e-03 - l_max_its = 100 - nl_max_its = 30 - dt = 2e-5 - end_time = 1 -[] - -[Outputs] - exodus = true - print_linear_residuals = false - file_base = concrete_rebar_bond_test -[] - -[Kernels] - [solid_x_concrete] - type = StressDivergenceTensors - block = 1 - component = 0 - variable = disp_x - use_displaced_mesh = true - [] - [solid_y_concrete] - type = StressDivergenceTensors - block = 1 - component = 1 - variable = disp_y - use_displaced_mesh = true - [] - [solid_x_truss] - type = StressDivergenceTensorsTruss - block = 2 - component = 0 - variable = disp_x - area = area - [] - [solid_y_truss] - type = StressDivergenceTensorsTruss - block = 2 - component = 1 - variable = disp_y - area = area - [] -[] - -[BCs] - [concrete_top_ydisp] - type = FunctionDirichletBC - variable = disp_y - boundary = '1' - function = '-t' - [] - [concrete_bottom_yfix] - type = DirichletBC - variable = disp_y - boundary = '2 3' - value = 0 - [] - [concrete_bottom_xfix] - type = DirichletBC - variable = disp_x - boundary = '2' - value = 0 - [] -[] - -[Constraints] - [rebar_x] - type = RebarBondSlipConstraint - slave = 2 - master = 1 - penalty = 1e6 - variable = 'disp_x' - master_variable = 'disp_x' - component = 0 - max_bondstress = 3.5e-10 - transitional_slip_values = 0.05e-3 - ultimate_slip = 1.0 - rebar_radius = 0.015 - frictional_bondstress = 1e-15 - [] - [rebar_y] - type = RebarBondSlipConstraint - slave = 2 - master = 1 - penalty = 1e6 - variable = 'disp_y' - master_variable = 'disp_y' - component = 1 - max_bondstress = 3.5e-10 - transitional_slip_values = 0.05e-3 - ultimate_slip = 1.0 - rebar_radius = 0.015 - frictional_bondstress = 1e-15 - [] - # [rebar_x] - # type = EqualValueEmbeddedConstraint - # slave = 2 - # master = 1 - # penalty = 1e6 - # variable = 'disp_x' - # master_variable = 'disp_x' - # formulation = penalty - # [] - # [rebar_y] - # type = EqualValueEmbeddedConstraint - # slave = 2 - # master = 1 - # penalty = 1e6 - # variable = 'disp_y' - # master_variable = 'disp_y' - # formulation = penalty - # [] -[] diff --git a/test/tests/rebar_bondslip/gold/RCBeam_constraint_out.e b/test/tests/rebar_bondslip/gold/RCBeam_constraint_out.e new file mode 100644 index 00000000..0ea24558 Binary files /dev/null and b/test/tests/rebar_bondslip/gold/RCBeam_constraint_out.e differ diff --git a/test/tests/rebar_bondslip/tests b/test/tests/rebar_bondslip/tests new file mode 100644 index 00000000..8005fc19 --- /dev/null +++ b/test/tests/rebar_bondslip/tests @@ -0,0 +1,11 @@ +[Tests] + issues = '#89' + requirement = 'Blackbear shall have a model to capture the bond-slip relation between concrete and rebars' + design = 'constraints/RebarBondSlipConstraint.md' + + [./bondslip] + type = 'Exodiff' + input = 'RCBeam_constraint.i' + exodiff = 'RCBeam_constraint_out.e' + [../] +[]