ReactionForceAux

Save the reaction force corresponding to the variable DOFs into this AuxVariable.

Input Parameters

  • vThe coupled variable whose components are coupled to AuxVariable

    C++ Type:std::vector<VariableName>

    Unit:(no unit assumed)

    Controllable:No

    Description:The coupled variable whose components are coupled to AuxVariable

  • variableThe name of the variable that this object applies to

    C++ Type:AuxVariableName

    Unit:(no unit assumed)

    Controllable:No

    Description:The name of the variable that this object applies to

  • vector_tagName of the vector tag to extract values from

    C++ Type:TagName

    Controllable:No

    Description:Name of the vector tag to extract values from

Required Parameters

  • 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

  • check_boundary_restrictedTrueWhether to check for multiple element sides on the boundary in the case of a boundary restricted, element aux variable. Setting this to false will allow contribution to a single element's elemental value(s) from multiple boundary sides on the same element (example: when the restricted boundary exists on two or more sides of an element, such as at a corner of a mesh

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Whether to check for multiple element sides on the boundary in the case of a boundary restricted, element aux variable. Setting this to false will allow contribution to a single element's elemental value(s) from multiple boundary sides on the same element (example: when the restricted boundary exists on two or more sides of an element, such as at a corner of a mesh

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.

  • 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

  • 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

Usage

First declare a tagged vector to save the residual contribution, i.e.

[Problem<<<{"href": "../../syntax/Problem/index.html"}>>>]
  extra_tag_vectors = 'ref'
[]
(modules/solid_mechanics/test/tests/plane_stress/3D_finite_tension_pull.i)

Then, inform the SolidMechanics Physics about the declared vector tag. The Physics will automatically accumulate the residual contribution into the tagged vector. Importantly, this should only be done for the Kernels (which are set up by the SolidMechanics Physics), and not for other objects such as boundary conditions.

[Physics<<<{"href": "../../syntax/Physics/index.html"}>>>]
  [SolidMechanics<<<{"href": "../../syntax/Physics/SolidMechanics/index.html"}>>>]
    [QuasiStatic<<<{"href": "../../syntax/Physics/SolidMechanics/QuasiStatic/index.html"}>>>]
      [plane_stress]
        strain<<<{"description": "Strain formulation"}>>> = FINITE
        extra_vector_tags<<<{"description": "The tag names for extra vectors that residual data should be saved into"}>>> = 'ref'
        generate_output<<<{"description": "Add scalar quantity output for stress and/or strain"}>>> = 'stress_xx stress_xy stress_yy stress_zz strain_xx strain_xy strain_yy strain_zz'
        add_variables<<<{"description": "Add the displacement variables"}>>> = true
      []
    []
  []
[]
(modules/solid_mechanics/test/tests/plane_stress/3D_finite_tension_pull.i)

Next, use the ReactionForceAux to read the accumulated residual contribution into an AuxVariable, i.e.

[AuxKernels<<<{"href": "../../syntax/AuxKernels/index.html"}>>>]
  [react_x]
    type = ReactionForceAux<<<{"description": "Extract the value of the residual from an appropriately formed tag vector and save those values as reaction forces in an AuxVariable", "href": "ReactionForceAux.html"}>>>
    vector_tag<<<{"description": "Name of the vector tag to extract values from"}>>> = 'ref'
    v<<<{"description": "The coupled variable whose components are coupled to AuxVariable"}>>> = 'disp_x'
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'react_x'
  []
[]
(modules/solid_mechanics/test/tests/plane_stress/3D_finite_tension_pull.i)

In this example, this would save the residual contribution in the direction into the AuxVariable named "react_x". Upon convergence of each time step, the residual contribution from the kernels will be close to zero (up to the tolerances you set) everywhere in the domain except where constraints or boundary conditions are applied. Examples of these constraints are Dirichlet/Neumann boundary conditions, pressure, applied torque, and contact, etc.. The final, accumulated residual contribution on the constrained degrees of freedom can then be interpreted as the distributed "reaction force".

Finally, if desired, the distributed reaction force can be summed up on a boundary to obtain the total reaction force. In the following example, the distributed reaction force is summed up on the "right" boundary where the displacement control is applied.

[Postprocessors<<<{"href": "../../syntax/Postprocessors/index.html"}>>>]
  [react_x]
    type = NodalSum<<<{"description": "Computes the sum of all of the nodal values of the specified variable. Note: This object sets the default \"unique_node_execute\" flag to true to avoid double counting nodes between shared blocks.", "href": "../postprocessors/NodalSum.html"}>>>
    variable<<<{"description": "The name of the variable that this postprocessor operates on"}>>> = 'react_x'
    boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = 'right'
  []
[]
(modules/solid_mechanics/test/tests/plane_stress/3D_finite_tension_pull.i)

Example input files

Input Files