www.mooseframework.org
Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Attributes | List of all members
DomainIntegralQFunction Class Reference

Coupled auxiliary value. More...

#include <DomainIntegralQFunction.h>

Inheritance diagram for DomainIntegralQFunction:
[legend]

Public Member Functions

 DomainIntegralQFunction (const InputParameters &parameters)
 Factory constructor, takes parameters so that all derived classes can be built using the same constructor. More...
 
virtual ~DomainIntegralQFunction ()
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Member Functions

virtual void initialSetup ()
 
virtual Real computeValue ()
 
void projectToFrontAtPoint (Real &dist_to_front, Real &dist_along_tangent)
 

Private Attributes

const Real _j_integral_radius_inner
 
const Real _j_integral_radius_outer
 
const CrackFrontDefinition *const _crack_front_definition
 
bool _has_crack_front_point_index
 
const unsigned int _crack_front_point_index
 
bool _treat_as_2d
 
bool _is_point_on_intersecting_boundary
 

Detailed Description

Coupled auxiliary value.

Definition at line 18 of file DomainIntegralQFunction.h.

Constructor & Destructor Documentation

◆ DomainIntegralQFunction()

DomainIntegralQFunction::DomainIntegralQFunction ( const InputParameters &  parameters)

Factory constructor, takes parameters so that all derived classes can be built using the same constructor.

Definition at line 33 of file DomainIntegralQFunction.C.

34  : AuxKernel(parameters),
35  _j_integral_radius_inner(getParam<Real>("j_integral_radius_inner")),
36  _j_integral_radius_outer(getParam<Real>("j_integral_radius_outer")),
37  _crack_front_definition(&getUserObject<CrackFrontDefinition>("crack_front_definition")),
38  _has_crack_front_point_index(isParamValid("crack_front_point_index")),
40  _has_crack_front_point_index ? getParam<unsigned int>("crack_front_point_index") : 0),
41  _treat_as_2d(false),
43 {
44 }

◆ ~DomainIntegralQFunction()

virtual DomainIntegralQFunction::~DomainIntegralQFunction ( )
inlinevirtual

Definition at line 29 of file DomainIntegralQFunction.h.

29 {}

Member Function Documentation

◆ computeValue()

Real DomainIntegralQFunction::computeValue ( )
protectedvirtual

Definition at line 71 of file DomainIntegralQFunction.C.

72 {
73  Real dist_to_crack_front;
74  Real dist_along_tangent;
75  projectToFrontAtPoint(dist_to_crack_front, dist_along_tangent);
76 
77  Real q = 1.0;
78  if (dist_to_crack_front > _j_integral_radius_inner &&
79  dist_to_crack_front < _j_integral_radius_outer)
80  q = (_j_integral_radius_outer - dist_to_crack_front) /
82  else if (dist_to_crack_front >= _j_integral_radius_outer)
83  q = 0.0;
84 
85  if (q > 0.0)
86  {
87  Real tangent_multiplier = 1.0;
88  if (!_treat_as_2d)
89  {
90  const Real forward_segment_length =
92  const Real backward_segment_length =
94 
95  if (dist_along_tangent >= 0.0)
96  {
97  if (forward_segment_length > 0.0)
98  tangent_multiplier = 1.0 - dist_along_tangent / forward_segment_length;
99  }
100  else
101  {
102  if (backward_segment_length > 0.0)
103  tangent_multiplier = 1.0 + dist_along_tangent / backward_segment_length;
104  }
105  }
106 
107  tangent_multiplier = std::max(tangent_multiplier, 0.0);
108  tangent_multiplier = std::min(tangent_multiplier, 1.0);
109 
110  // Set to zero if a node is on a designated free surface and its crack front node is not.
113  tangent_multiplier = 0.0;
114 
115  q *= tangent_multiplier;
116  }
117 
118  return q;
119 }

◆ initialSetup()

void DomainIntegralQFunction::initialSetup ( )
protectedvirtual

Definition at line 47 of file DomainIntegralQFunction.C.

48 {
50 
51  if (_treat_as_2d)
52  {
54  {
55  mooseWarning(
56  "crack_front_point_index ignored because CrackFrontDefinition is set to treat as 2D");
57  }
58  }
59  else
60  {
62  {
63  mooseError("crack_front_point_index must be specified in DomainIntegralQFunction");
64  }
65  }
68 }

◆ projectToFrontAtPoint()

void DomainIntegralQFunction::projectToFrontAtPoint ( Real &  dist_to_front,
Real &  dist_along_tangent 
)
protected

Definition at line 122 of file DomainIntegralQFunction.C.

123 {
124  const Point * crack_front_point =
126 
127  Point p = *_current_node;
128  const RealVectorValue & crack_front_tangent =
130 
131  RealVectorValue crack_node_to_current_node = p - *crack_front_point;
132  dist_along_tangent = crack_node_to_current_node * crack_front_tangent;
133  RealVectorValue projection_point = *crack_front_point + dist_along_tangent * crack_front_tangent;
134  RealVectorValue axis_to_current_node = p - projection_point;
135  dist_to_front = axis_to_current_node.norm();
136 }

Referenced by computeValue().

◆ validParams()

InputParameters DomainIntegralQFunction::validParams ( )
static

Definition at line 17 of file DomainIntegralQFunction.C.

18 {
19  InputParameters params = AuxKernel::validParams();
20  params.addClassDescription("Computes the q-function for a segment along the crack front, used in "
21  "the calculation of the J-integral");
22  params.addRequiredParam<Real>("j_integral_radius_inner", "Radius for J-Integral calculation");
23  params.addRequiredParam<Real>("j_integral_radius_outer", "Radius for J-Integral calculation");
24  params.addRequiredParam<UserObjectName>("crack_front_definition",
25  "The CrackFrontDefinition user object name");
26  params.addParam<unsigned int>(
27  "crack_front_point_index",
28  "The index of the point on the crack front corresponding to this q function");
29  params.set<bool>("use_displaced_mesh") = false;
30  return params;
31 }

Member Data Documentation

◆ _crack_front_definition

const CrackFrontDefinition* const DomainIntegralQFunction::_crack_front_definition
private

Definition at line 39 of file DomainIntegralQFunction.h.

Referenced by computeValue(), initialSetup(), and projectToFrontAtPoint().

◆ _crack_front_point_index

const unsigned int DomainIntegralQFunction::_crack_front_point_index
private

Definition at line 41 of file DomainIntegralQFunction.h.

Referenced by computeValue(), initialSetup(), and projectToFrontAtPoint().

◆ _has_crack_front_point_index

bool DomainIntegralQFunction::_has_crack_front_point_index
private

Definition at line 40 of file DomainIntegralQFunction.h.

Referenced by initialSetup().

◆ _is_point_on_intersecting_boundary

bool DomainIntegralQFunction::_is_point_on_intersecting_boundary
private

Definition at line 43 of file DomainIntegralQFunction.h.

Referenced by computeValue(), and initialSetup().

◆ _j_integral_radius_inner

const Real DomainIntegralQFunction::_j_integral_radius_inner
private

Definition at line 37 of file DomainIntegralQFunction.h.

Referenced by computeValue().

◆ _j_integral_radius_outer

const Real DomainIntegralQFunction::_j_integral_radius_outer
private

Definition at line 38 of file DomainIntegralQFunction.h.

Referenced by computeValue().

◆ _treat_as_2d

bool DomainIntegralQFunction::_treat_as_2d
private

Definition at line 42 of file DomainIntegralQFunction.h.

Referenced by computeValue(), and initialSetup().


The documentation for this class was generated from the following files:
DomainIntegralQFunction::_j_integral_radius_outer
const Real _j_integral_radius_outer
Definition: DomainIntegralQFunction.h:38
CrackFrontDefinition::getCrackFrontTangent
const RealVectorValue & getCrackFrontTangent(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1071
DomainIntegralQFunction::_is_point_on_intersecting_boundary
bool _is_point_on_intersecting_boundary
Definition: DomainIntegralQFunction.h:43
DomainIntegralQFunction::_has_crack_front_point_index
bool _has_crack_front_point_index
Definition: DomainIntegralQFunction.h:40
CrackFrontDefinition::isNodeOnIntersectingBoundary
bool isNodeOnIntersectingBoundary(const Node *const node) const
Definition: CrackFrontDefinition.C:1290
CrackFrontDefinition::isPointWithIndexOnIntersectingBoundary
bool isPointWithIndexOnIntersectingBoundary(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1307
CrackFrontDefinition::getCrackFrontPoint
const Point * getCrackFrontPoint(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1057
validParams
InputParameters validParams()
DomainIntegralQFunction::projectToFrontAtPoint
void projectToFrontAtPoint(Real &dist_to_front, Real &dist_along_tangent)
Definition: DomainIntegralQFunction.C:122
DomainIntegralQFunction::_treat_as_2d
bool _treat_as_2d
Definition: DomainIntegralQFunction.h:42
DomainIntegralQFunction::_crack_front_definition
const CrackFrontDefinition *const _crack_front_definition
Definition: DomainIntegralQFunction.h:39
CrackFrontDefinition::treatAs2D
bool treatAs2D() const
Definition: CrackFrontDefinition.h:59
DomainIntegralQFunction::_crack_front_point_index
const unsigned int _crack_front_point_index
Definition: DomainIntegralQFunction.h:41
CrackFrontDefinition::getCrackFrontBackwardSegmentLength
Real getCrackFrontBackwardSegmentLength(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1084
CrackFrontDefinition::getCrackFrontForwardSegmentLength
Real getCrackFrontForwardSegmentLength(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1078
DomainIntegralQFunction::_j_integral_radius_inner
const Real _j_integral_radius_inner
Definition: DomainIntegralQFunction.h:37