From 2e8948846711eff9f616ff211f526e599feecaf3 Mon Sep 17 00:00:00 2001 From: Lynn Munday Date: Wed, 18 Dec 2024 14:50:27 -0700 Subject: [PATCH 01/17] Creating base class for nonlocal material averaged vector postprocessor at crack tip --- .../CrackFrontNonlocalMaterialBase.h | 74 ++++++++ .../CrackFrontNonlocalStress.h | 50 +----- .../CrackFrontNonlocalMaterialBase.C | 161 ++++++++++++++++++ .../CrackFrontNonlocalStress.C | 139 +-------------- .../crack_front_nonlocal_stress.i | 1 + ...ress_out_CrackFrontNonlocalStress_0001.csv | 2 +- 6 files changed, 245 insertions(+), 182 deletions(-) create mode 100644 modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h create mode 100644 modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h new file mode 100644 index 000000000000..c6647336a8cf --- /dev/null +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h @@ -0,0 +1,74 @@ +//* This file is part of the MOOSE framework +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html + +#pragma once + +#include "ElementVectorPostprocessor.h" + +// Forward Declarations +class CrackFrontDefinition; +/** + * This vectorpostprocessor computes the average stress scalar normal to the crack front at points + * along the crack front. + */ +class CrackFrontNonlocalMaterialBase : public ElementVectorPostprocessor +{ +public: + static InputParameters validParams(); + + CrackFrontNonlocalMaterialBase(const InputParameters & parameters); + + virtual void initialSetup() override; + virtual void initialize() override; + virtual void execute() override; + virtual void finalize() override; + virtual void threadJoin(const UserObject & y) override; + +protected: + /** dimensions of the box in front of the crack tip that the stress is averaged over + * The box is centered in front of the crack tip + * _box_length distance box extends in front of the crack tip + * _box_width is tangent to the crack tip, centered on the crack point + * _box_height is normal to the crack tip, centered on the crack point + */ + ///@{ + Real _box_length; + Real _box_width; + Real _box_height; + ///@} + + /// used to transform local coordinates to crack front coordinates + const CrackFrontDefinition * _crack_front_definition; + + /// Base name of the material system + const std::string _base_name; + + // volume being integrated over for each crack front + std::vector _volume; + + /// Vectors computed by this VectorPostprocessor: + /// x,y,z coordinates, and position of nodes along crack front, and crack tip average scalar stress + ///@{ + VectorPostprocessorValue & _x; + VectorPostprocessorValue & _y; + VectorPostprocessorValue & _z; + VectorPostprocessorValue & _position; + VectorPostprocessorValue & _avg_crack_tip_scalar; + ///@} + + /** + * Determine whether a point is located within a specified crack front oriented box + * @param crack_front_point_index Index of the point on the crack front that the box is based on + * @param qp_coord Point object to determine whether it is inside the box + * @return 1 if point is within the box, 0 otherwise + */ + Real BoxWeightingFunction(std::size_t crack_front_point_index, const Point & qp_coord) const; + + virtual Real getCrackFrontScalar(const unsigned int qp, Point direction) const = 0; +}; diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h index 70239c6f1431..2dd5e707de27 100644 --- a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h @@ -9,66 +9,22 @@ #pragma once -#include "ElementVectorPostprocessor.h" +#include "CrackFrontNonlocalMaterialBase.h" -// Forward Declarations -class CrackFrontDefinition; /** * This vectorpostprocessor computes the average stress scalar normal to the crack front at points * along the crack front. */ -class CrackFrontNonlocalStress : public ElementVectorPostprocessor +class CrackFrontNonlocalStress : public CrackFrontNonlocalMaterialBase { public: static InputParameters validParams(); CrackFrontNonlocalStress(const InputParameters & parameters); - virtual void initialSetup() override; - virtual void initialize() override; - virtual void execute() override; - virtual void finalize() override; - virtual void threadJoin(const UserObject & y) override; - protected: - /** dimensions of the box in front of the crack tip that the stress is averaged over - * The box is centered in front of the crack tip - * _box_length distance box extends in front of the crack tip - * _box_width is tangent to the crack tip, centered on the crack point - * _box_height is normal to the crack tip, centered on the crack point - */ - ///@{ - Real _box_length; - Real _box_width; - Real _box_height; - ///@} - - /// used to transform local coordinates to crack front coordinates - const CrackFrontDefinition * _crack_front_definition; - - /// Base name of the material system - const std::string _base_name; /// The stress tensor const MaterialProperty & _stress; - // volume being integrated over for each crack front - std::vector _volume; - - /// Vectors computed by this VectorPostprocessor: - /// x,y,z coordinates, and position of nodes along crack front, and crack tip average scalar stress - ///@{ - VectorPostprocessorValue & _x; - VectorPostprocessorValue & _y; - VectorPostprocessorValue & _z; - VectorPostprocessorValue & _position; - VectorPostprocessorValue & _avg_crack_tip_stress; - ///@} - - /** - * Determine whether a point is located within a specified crack front oriented box - * @param crack_front_point_index Index of the point on the crack front that the box is based on - * @param qp_coord Point object to determine whether it is inside the box - * @return 1 if point is within the box, 0 otherwise - */ - Real BoxWeightingFunction(std::size_t crack_front_point_index, const Point & qp_coord) const; + Real getCrackFrontScalar(const unsigned int qp, Point direction) const override; }; diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C new file mode 100644 index 000000000000..700b2a56c64e --- /dev/null +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C @@ -0,0 +1,161 @@ +//* This file is part of the MOOSE framework +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html + +#include "CrackFrontNonlocalMaterialBase.h" +#include "Moose.h" +#include "MooseEnum.h" +#include "Conversion.h" +#include "libmesh/string_to_enum.h" +#include "libmesh/quadrature.h" +#include "libmesh/utility.h" +#include "CrackFrontDefinition.h" +#include "libmesh/utility.h" + +InputParameters +CrackFrontNonlocalMaterialBase::validParams() +{ + InputParameters params = ElementVectorPostprocessor::validParams(); + params.addRequiredParam("crack_front_definition", + "The CrackFrontDefinition user object name"); + params.addRequiredParam("box_length", "Distance in front of crack front."); + params.addRequiredParam("box_height", "Distance normal to front of crack front."); + params.addParam("box_width", "Distance tangent to front of crack front."); + params.addRequiredParam("material_name", + "Get name of material property to compute at crack front"); + params.addParam("base_name", + "Optional parameter that allows the user to define " + "multiple mechanics material systems on the same " + "block, i.e. for multiple phases"); + params.set("use_displaced_mesh") = false; + // EXEC_NONLINEAR to work with xfem_udpates + params.set("execute_on") = {EXEC_TIMESTEP_BEGIN}; + params.addClassDescription("Computes the average material property at a crack front."); + return params; +} + +CrackFrontNonlocalMaterialBase::CrackFrontNonlocalMaterialBase(const InputParameters & parameters) + : ElementVectorPostprocessor(parameters), + _box_length(getParam("box_length")), + _box_width(isParamValid("box_width") ? getParam("box_width") : 1), + _box_height(getParam("box_height")), + _base_name(isParamValid("base_name") ? getParam("base_name") + "_" : ""), + _x(declareVector("x")), + _y(declareVector("y")), + _z(declareVector("z")), + _position(declareVector("id")), + _avg_crack_tip_scalar( + declareVector("crack_tip_" + _base_name + getParam("material_name"))) +{ + if (_mesh.dimension() == 3 && !isParamSetByUser("box_width")) + paramError("box_width", "Must define box_width in 3D problems."); + // add user object dependencies by name (the UOs do not need to exist yet for this) + _depend_uo.insert(getParam("crack_front_definition")); +} + +void +CrackFrontNonlocalMaterialBase::initialSetup() +{ + // gather coupled user objects late to ensure they are constructed. Do not add them as + // dependencies (that's already done in the constructor). + const auto uo_name = getParam("crack_front_definition"); + _crack_front_definition = + &(getUserObjectByName(uo_name, /*is_dependency = */ false)); +} + +void +CrackFrontNonlocalMaterialBase::initialize() +{ + std::size_t num_pts = _crack_front_definition->getNumCrackFrontPoints(); + + _volume.assign(num_pts, 0.0); + _x.assign(num_pts, 0.0); + _y.assign(num_pts, 0.0); + _z.assign(num_pts, 0.0); + _position.assign(num_pts, 0.0); + _avg_crack_tip_scalar.assign(num_pts, 0.0); +} + +void +CrackFrontNonlocalMaterialBase::execute() +{ + // icfp crack front point index + for (std::size_t icfp = 0; icfp < _avg_crack_tip_scalar.size(); icfp++) + { + Point direction = _crack_front_definition->getCrackFrontNormal(icfp); + for (unsigned int qp = 0; qp < _qrule->n_points(); qp++) + { + Real q = BoxWeightingFunction(icfp, _q_point[qp]); + if (q == 0) + continue; + + Real scalar = getCrackFrontScalar(qp, direction); + _avg_crack_tip_scalar[icfp] += _JxW[qp] * _coord[qp] * scalar * q; + _volume[icfp] += _JxW[qp] * _coord[qp] * q; + } + } +} + +void +CrackFrontNonlocalMaterialBase::finalize() +{ + gatherSum(_avg_crack_tip_scalar); + gatherSum(_volume); + + for (std::size_t icfp = 0; icfp < _avg_crack_tip_scalar.size(); ++icfp) + { + if (_volume[icfp] != 0) + _avg_crack_tip_scalar[icfp] = _avg_crack_tip_scalar[icfp] / _volume[icfp]; + else + _avg_crack_tip_scalar[icfp] = 0; + + const auto cfp = _crack_front_definition->getCrackFrontPoint(icfp); + _x[icfp] = (*cfp)(0); + _y[icfp] = (*cfp)(1); + _z[icfp] = (*cfp)(2); + _position[icfp] = _crack_front_definition->getDistanceAlongFront(icfp); + } +} + +void +CrackFrontNonlocalMaterialBase::threadJoin(const UserObject & y) +{ + const auto & uo = static_cast(y); + + for (auto i = beginIndex(_avg_crack_tip_scalar); i < _avg_crack_tip_scalar.size(); ++i) + { + _volume[i] += uo._volume[i]; + _avg_crack_tip_scalar[i] += uo._avg_crack_tip_scalar[i]; + } +} + +Real +CrackFrontNonlocalMaterialBase::BoxWeightingFunction(std::size_t crack_front_point_index, + const Point & qp_coord) const +{ + const Point * cf_pt = _crack_front_definition->getCrackFrontPoint(crack_front_point_index); + RealVectorValue crack_node_to_current_node = qp_coord - *cf_pt; + + // crackfront coordinates are: + // crack_node_to_current_node_rot[0]= crack direction + // crack_node_to_current_node_rot[0]= normal to crack face + // crack_node_to_current_node_rot[0]= tangent to crack face along crack front (not used in 2D) + RealVectorValue crack_node_to_current_node_rot = + _crack_front_definition->rotateToCrackFrontCoords(crack_node_to_current_node, + crack_front_point_index); + Real q = 0.0; + if ((crack_node_to_current_node_rot(0) > 0) && + (crack_node_to_current_node_rot(0) <= _box_length) && + (std::abs(crack_node_to_current_node_rot(1)) <= _box_height / 2) && + (std::abs(crack_node_to_current_node_rot(2)) <= _box_width / 2)) + { + q = 1.0; + } + + return q; +} diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C index 3f5126689826..c278fcc94639 100644 --- a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C @@ -9,157 +9,28 @@ #include "CrackFrontNonlocalStress.h" #include "Moose.h" -#include "MooseEnum.h" #include "RankTwoTensor.h" -#include "Conversion.h" -#include "libmesh/string_to_enum.h" #include "libmesh/quadrature.h" -#include "libmesh/utility.h" -#include "CrackFrontDefinition.h" #include "RankTwoScalarTools.h" -#include "libmesh/utility.h" registerMooseObject("SolidMechanicsApp", CrackFrontNonlocalStress); InputParameters CrackFrontNonlocalStress::validParams() { - InputParameters params = ElementVectorPostprocessor::validParams(); - params.addRequiredParam("crack_front_definition", - "The CrackFrontDefinition user object name"); - params.addRequiredParam("box_length", "Distance in front of crack front."); - params.addRequiredParam("box_height", "Distance normal to front of crack front."); - params.addParam("box_width", "Distance tangent to front of crack front."); - - params.addParam("base_name", - "Optional parameter that allows the user to define " - "multiple mechanics material systems on the same " - "block, i.e. for multiple phases"); - params.set("use_displaced_mesh") = false; - // EXEC_NONLINEAR to work with xfem_udpates - params.set("execute_on") = {EXEC_TIMESTEP_BEGIN}; + InputParameters params = CrackFrontNonlocalMaterialBase::validParams(); params.addClassDescription("Computes the average stress normal to the crack face."); return params; } CrackFrontNonlocalStress::CrackFrontNonlocalStress(const InputParameters & parameters) - : ElementVectorPostprocessor(parameters), - _box_length(getParam("box_length")), - _box_width(isParamValid("box_width") ? getParam("box_width") : 1), - _box_height(getParam("box_height")), - _base_name(isParamValid("base_name") ? getParam("base_name") + "_" : ""), - _stress(getMaterialProperty(_base_name + "stress")), - _x(declareVector("x")), - _y(declareVector("y")), - _z(declareVector("z")), - _position(declareVector("id")), - _avg_crack_tip_stress(declareVector("crack_tip_stress")) -{ - if (_mesh.dimension() == 3 && !isParamSetByUser("box_width")) - paramError("box_width", "Must define box_width in 3D problems."); - // add user object dependencies by name (the UOs do not need to exist yet for this) - _depend_uo.insert(getParam("crack_front_definition")); -} - -void -CrackFrontNonlocalStress::initialSetup() -{ - // gather coupled user objects late to ensure they are constructed. Do not add them as - // dependencies (that's already done in the constructor). - const auto uo_name = getParam("crack_front_definition"); - _crack_front_definition = - &(getUserObjectByName(uo_name, /*is_dependency = */ false)); -} - -void -CrackFrontNonlocalStress::initialize() -{ - std::size_t num_pts = _crack_front_definition->getNumCrackFrontPoints(); - - _volume.assign(num_pts, 0.0); - _x.assign(num_pts, 0.0); - _y.assign(num_pts, 0.0); - _z.assign(num_pts, 0.0); - _position.assign(num_pts, 0.0); - _avg_crack_tip_stress.assign(num_pts, 0.0); -} - -void -CrackFrontNonlocalStress::execute() + : CrackFrontNonlocalMaterialBase(parameters), + _stress(getMaterialProperty(_base_name + "stress")) { - // icfp crack front point index - for (std::size_t icfp = 0; icfp < _avg_crack_tip_stress.size(); icfp++) - { - Point crack_face_normal = _crack_front_definition->getCrackFrontNormal(icfp); - RankTwoTensor stress_avg; - for (unsigned int qp = 0; qp < _qrule->n_points(); qp++) - { - Real q = BoxWeightingFunction(icfp, _q_point[qp]); - if (q == 0) - continue; - - Real normal_stress = RankTwoScalarTools::directionValueTensor(_stress[qp], crack_face_normal); - _avg_crack_tip_stress[icfp] += _JxW[qp] * _coord[qp] * normal_stress * q; - _volume[icfp] += _JxW[qp] * _coord[qp] * q; - } - } -} - -void -CrackFrontNonlocalStress::finalize() -{ - gatherSum(_avg_crack_tip_stress); - gatherSum(_volume); - - for (std::size_t icfp = 0; icfp < _avg_crack_tip_stress.size(); ++icfp) - { - if (_volume[icfp] != 0) - _avg_crack_tip_stress[icfp] = _avg_crack_tip_stress[icfp] / _volume[icfp]; - else - _avg_crack_tip_stress[icfp] = 0; - - const auto cfp = _crack_front_definition->getCrackFrontPoint(icfp); - _x[icfp] = (*cfp)(0); - _y[icfp] = (*cfp)(1); - _z[icfp] = (*cfp)(2); - _position[icfp] = _crack_front_definition->getDistanceAlongFront(icfp); - } -} - -void -CrackFrontNonlocalStress::threadJoin(const UserObject & y) -{ - const auto & uo = static_cast(y); - - for (auto i = beginIndex(_avg_crack_tip_stress); i < _avg_crack_tip_stress.size(); ++i) - { - _volume[i] += uo._volume[i]; - _avg_crack_tip_stress[i] += uo._avg_crack_tip_stress[i]; - } } Real -CrackFrontNonlocalStress::BoxWeightingFunction(std::size_t crack_front_point_index, - const Point & qp_coord) const +CrackFrontNonlocalStress::getCrackFrontScalar(const unsigned int qp, Point direction) const { - const Point * cf_pt = _crack_front_definition->getCrackFrontPoint(crack_front_point_index); - RealVectorValue crack_node_to_current_node = qp_coord - *cf_pt; - - // crackfront coordinates are: - // crack_node_to_current_node_rot[0]= crack direction - // crack_node_to_current_node_rot[0]= normal to crack face - // crack_node_to_current_node_rot[0]= tangent to crack face along crack front (not used in 2D) - RealVectorValue crack_node_to_current_node_rot = - _crack_front_definition->rotateToCrackFrontCoords(crack_node_to_current_node, - crack_front_point_index); - Real q = 0.0; - if ((crack_node_to_current_node_rot(0) > 0) && - (crack_node_to_current_node_rot(0) <= _box_length) && - (std::abs(crack_node_to_current_node_rot(1)) <= _box_height / 2) && - (std::abs(crack_node_to_current_node_rot(2)) <= _box_width / 2)) - { - q = 1.0; - } - - return q; + return RankTwoScalarTools::directionValueTensor(_stress[qp], direction); } diff --git a/modules/solid_mechanics/test/tests/crack_front_stress/crack_front_nonlocal_stress.i b/modules/solid_mechanics/test/tests/crack_front_stress/crack_front_nonlocal_stress.i index d71bd1538b1e..bed7040480c2 100644 --- a/modules/solid_mechanics/test/tests/crack_front_stress/crack_front_nonlocal_stress.i +++ b/modules/solid_mechanics/test/tests/crack_front_stress/crack_front_nonlocal_stress.i @@ -40,6 +40,7 @@ [VectorPostprocessors] [CrackFrontNonlocalStress] type = CrackFrontNonlocalStress + material_name = stress base_name = generic crack_front_definition = crack box_length = 0.1 diff --git a/modules/solid_mechanics/test/tests/crack_front_stress/gold/crack_front_nonlocal_stress_out_CrackFrontNonlocalStress_0001.csv b/modules/solid_mechanics/test/tests/crack_front_stress/gold/crack_front_nonlocal_stress_out_CrackFrontNonlocalStress_0001.csv index 80d869ebcd98..1451dfaa1d11 100644 --- a/modules/solid_mechanics/test/tests/crack_front_stress/gold/crack_front_nonlocal_stress_out_CrackFrontNonlocalStress_0001.csv +++ b/modules/solid_mechanics/test/tests/crack_front_stress/gold/crack_front_nonlocal_stress_out_CrackFrontNonlocalStress_0001.csv @@ -1,4 +1,4 @@ -crack_tip_stress,id,x,y,z +crack_tip_generic_stress,id,x,y,z 10.012781609899,0,-1.2246467991474e-17,-2.4492935982947e-17,0.2 10,0.041811385307061,-1.0677810676341e-17,-0.041582338163552,0.19562952014676 10,0.083622770614123,-1.2055066943765e-17,-0.08134732861516,0.18270909152852 From 5f0f10e622df8d88ff620516c51479e98b9d2fc5 Mon Sep 17 00:00:00 2001 From: Lynn Munday Date: Wed, 18 Dec 2024 15:07:41 -0700 Subject: [PATCH 02/17] adding scalar material output at crack tip --- .../CrackFrontNonlocalMaterialBase.h | 2 +- .../CrackFrontNonlocalScalar.h | 30 ++++++++++++++++ .../CrackFrontNonlocalStress.h | 2 +- .../CrackFrontNonlocalMaterialBase.C | 2 +- .../CrackFrontNonlocalScalar.C | 36 +++++++++++++++++++ .../CrackFrontNonlocalStress.C | 4 +-- .../crack_front_nonlocal_materials.i} | 0 .../crack_loop.e | 0 ...als_out_CrackFrontNonlocalStress_0001.csv} | 0 .../tests | 4 +-- 10 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalar.h create mode 100644 modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalar.C rename modules/solid_mechanics/test/tests/{crack_front_stress/crack_front_nonlocal_stress.i => crack_front_materials/crack_front_nonlocal_materials.i} (100%) rename modules/solid_mechanics/test/tests/{crack_front_stress => crack_front_materials}/crack_loop.e (100%) rename modules/solid_mechanics/test/tests/{crack_front_stress/gold/crack_front_nonlocal_stress_out_CrackFrontNonlocalStress_0001.csv => crack_front_materials/gold/crack_front_nonlocal_materials_out_CrackFrontNonlocalStress_0001.csv} (100%) rename modules/solid_mechanics/test/tests/{crack_front_stress => crack_front_materials}/tests (62%) diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h index c6647336a8cf..4275a810e0b9 100644 --- a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h @@ -70,5 +70,5 @@ class CrackFrontNonlocalMaterialBase : public ElementVectorPostprocessor */ Real BoxWeightingFunction(std::size_t crack_front_point_index, const Point & qp_coord) const; - virtual Real getCrackFrontScalar(const unsigned int qp, Point direction) const = 0; + virtual Real getQPCrackFrontScalar(const unsigned int qp, Point direction) const = 0; }; diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalar.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalar.h new file mode 100644 index 000000000000..8756cddb8871 --- /dev/null +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalar.h @@ -0,0 +1,30 @@ +//* This file is part of the MOOSE framework +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html + +#pragma once + +#include "CrackFrontNonlocalMaterialBase.h" + +/** + * This vectorpostprocessor computes the average scalar material normal to the crack front at points + * along the crack front. + */ +class CrackFrontNonlocalScalar : public CrackFrontNonlocalMaterialBase +{ +public: + static InputParameters validParams(); + + CrackFrontNonlocalScalar(const InputParameters & parameters); + +protected: + /// The scalar material property + const MaterialProperty & _scalar; + + Real getQPCrackFrontScalar(const unsigned int qp, Point /*direction*/) const override; +}; diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h index 2dd5e707de27..7bd244b82c4a 100644 --- a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h @@ -26,5 +26,5 @@ class CrackFrontNonlocalStress : public CrackFrontNonlocalMaterialBase /// The stress tensor const MaterialProperty & _stress; - Real getCrackFrontScalar(const unsigned int qp, Point direction) const override; + Real getQPCrackFrontScalar(const unsigned int qp, Point direction) const override; }; diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C index 700b2a56c64e..8702b9306032 100644 --- a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C @@ -94,7 +94,7 @@ CrackFrontNonlocalMaterialBase::execute() if (q == 0) continue; - Real scalar = getCrackFrontScalar(qp, direction); + Real scalar = getQPCrackFrontScalar(qp, direction); _avg_crack_tip_scalar[icfp] += _JxW[qp] * _coord[qp] * scalar * q; _volume[icfp] += _JxW[qp] * _coord[qp] * q; } diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalar.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalar.C new file mode 100644 index 000000000000..46851d827aa9 --- /dev/null +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalar.C @@ -0,0 +1,36 @@ +//* This file is part of the MOOSE framework +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html + +#include "CrackFrontNonlocalScalar.h" +#include "Moose.h" +#include "RankTwoTensor.h" +#include "libmesh/quadrature.h" +#include "RankTwoScalarTools.h" + +registerMooseObject("SolidMechanicsApp", CrackFrontNonlocalScalar); + +InputParameters +CrackFrontNonlocalScalar::validParams() +{ + InputParameters params = CrackFrontNonlocalMaterialBase::validParams(); + params.addClassDescription("Computes the average material normal to the crack face."); + return params; +} + +CrackFrontNonlocalScalar::CrackFrontNonlocalScalar(const InputParameters & parameters) + : CrackFrontNonlocalMaterialBase(parameters), + _scalar(getMaterialProperty(_base_name + getParam("material_name"))) +{ +} + +Real +CrackFrontNonlocalScalar::getQPCrackFrontScalar(const unsigned int qp, Point /*direction*/) const +{ + return _scalar[qp]; +} diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C index c278fcc94639..13a8866c1714 100644 --- a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C @@ -25,12 +25,12 @@ CrackFrontNonlocalStress::validParams() CrackFrontNonlocalStress::CrackFrontNonlocalStress(const InputParameters & parameters) : CrackFrontNonlocalMaterialBase(parameters), - _stress(getMaterialProperty(_base_name + "stress")) + _stress(getMaterialProperty(_base_name + getParam("material_name"))) { } Real -CrackFrontNonlocalStress::getCrackFrontScalar(const unsigned int qp, Point direction) const +CrackFrontNonlocalStress::getQPCrackFrontScalar(const unsigned int qp, Point direction) const { return RankTwoScalarTools::directionValueTensor(_stress[qp], direction); } diff --git a/modules/solid_mechanics/test/tests/crack_front_stress/crack_front_nonlocal_stress.i b/modules/solid_mechanics/test/tests/crack_front_materials/crack_front_nonlocal_materials.i similarity index 100% rename from modules/solid_mechanics/test/tests/crack_front_stress/crack_front_nonlocal_stress.i rename to modules/solid_mechanics/test/tests/crack_front_materials/crack_front_nonlocal_materials.i diff --git a/modules/solid_mechanics/test/tests/crack_front_stress/crack_loop.e b/modules/solid_mechanics/test/tests/crack_front_materials/crack_loop.e similarity index 100% rename from modules/solid_mechanics/test/tests/crack_front_stress/crack_loop.e rename to modules/solid_mechanics/test/tests/crack_front_materials/crack_loop.e diff --git a/modules/solid_mechanics/test/tests/crack_front_stress/gold/crack_front_nonlocal_stress_out_CrackFrontNonlocalStress_0001.csv b/modules/solid_mechanics/test/tests/crack_front_materials/gold/crack_front_nonlocal_materials_out_CrackFrontNonlocalStress_0001.csv similarity index 100% rename from modules/solid_mechanics/test/tests/crack_front_stress/gold/crack_front_nonlocal_stress_out_CrackFrontNonlocalStress_0001.csv rename to modules/solid_mechanics/test/tests/crack_front_materials/gold/crack_front_nonlocal_materials_out_CrackFrontNonlocalStress_0001.csv diff --git a/modules/solid_mechanics/test/tests/crack_front_stress/tests b/modules/solid_mechanics/test/tests/crack_front_materials/tests similarity index 62% rename from modules/solid_mechanics/test/tests/crack_front_stress/tests rename to modules/solid_mechanics/test/tests/crack_front_materials/tests index 1834d91b381e..626bfd9c2976 100644 --- a/modules/solid_mechanics/test/tests/crack_front_stress/tests +++ b/modules/solid_mechanics/test/tests/crack_front_materials/tests @@ -3,8 +3,8 @@ issues = '#27659' [crack_front_stress] type = 'CSVDiff' - input = 'crack_front_nonlocal_stress.i' - csvdiff = 'crack_front_nonlocal_stress_out_CrackFrontNonlocalStress_0001.csv' + input = 'crack_front_nonlocal_materials.i' + csvdiff = 'crack_front_nonlocal_materials_out_CrackFrontNonlocalStress_0001.csv' requirement = 'The system shall compute the average stress at each crack point in a 3D domain.' [] [] From 1adaba95270b98c2ec5fc626b994f86fdf36f6ab Mon Sep 17 00:00:00 2001 From: Lynn Munday Date: Wed, 18 Dec 2024 15:16:42 -0700 Subject: [PATCH 03/17] fixing tests for changes to CrackFrontNonlocalStress vpp input format and output --- .../mesh_cut_2D_fracture/crack_front_stress_function_growth.i | 1 + .../test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i | 1 + .../gold/stress_check_CrackFrontNonlocalStress_0001.csv | 2 +- .../gold/stress_check_CrackFrontNonlocalStress_0002.csv | 2 +- .../gold/stress_check_CrackFrontNonlocalStress_0003.csv | 2 +- .../gold/stress_check_CrackFrontNonlocalStress_0004.csv | 2 +- 6 files changed, 6 insertions(+), 4 deletions(-) diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/crack_front_stress_function_growth.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/crack_front_stress_function_growth.i index cb1a5dd68f41..1e1ea52e5938 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/crack_front_stress_function_growth.i +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/crack_front_stress_function_growth.i @@ -119,6 +119,7 @@ [CrackFrontNonlocalStress] type = CrackFrontNonlocalStress base_name = generic + material_name = stress crack_front_definition = crack_tip box_length = 0.1 box_height = 0.05 diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i index 7b60e0b71b1d..5ed27417069c 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i @@ -49,6 +49,7 @@ [VectorPostprocessors] [CrackFrontNonlocalStressVpp] type = CrackFrontNonlocalStress + material_name = stress crack_front_definition = crackFrontDefinition box_length = 0.05 box_height = 0.1 diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0001.csv b/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0001.csv index 25b57c692321..50e55b7d954e 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0001.csv +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0001.csv @@ -1,3 +1,3 @@ -crack_tip_stress,id,x,y,z +crack_tip_generic_stress,id,x,y,z 0,0,-0.301,0.5,0 0,0,0.301,0.5,0 diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0002.csv b/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0002.csv index 24264912486b..287bf906cf2b 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0002.csv +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0002.csv @@ -1,3 +1,3 @@ -crack_tip_stress,id,x,y,z +crack_tip_generic_stress,id,x,y,z 0.59642857142857,0,-0.301,0.55,0 -0.57376373626374,0,0.33635533905933,0.53535533905933,0 diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0003.csv b/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0003.csv index 54b13dcb5186..f133a83b4da1 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0003.csv +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0003.csv @@ -1,3 +1,3 @@ -crack_tip_stress,id,x,y,z +crack_tip_generic_stress,id,x,y,z 0.62321428571429,0,-0.301,0.6,0 -0.60238095238095,0,0.37171067811865,0.57071067811865,0 diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0004.csv b/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0004.csv index 7133736190b5..88fb69d0a2ab 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0004.csv +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_check_CrackFrontNonlocalStress_0004.csv @@ -1,3 +1,3 @@ -crack_tip_stress,id,x,y,z +crack_tip_generic_stress,id,x,y,z 0,0,-0.301,0.65,0 -0.62831632653061,0,0.40706601717798,0.60606601717798,0 From 407b5facbc54884d0c5919657eec28b8a2b6bb69 Mon Sep 17 00:00:00 2001 From: Lynn Munday Date: Wed, 18 Dec 2024 17:02:48 -0700 Subject: [PATCH 04/17] adding k_critical_vpp to MeshCut2D object --- .../userobjects/MeshCut2DFractureUserObject.h | 2 + .../userobjects/MeshCut2DFractureUserObject.C | 44 ++++++++++++++++--- .../edge_crack_2d_propagation.i | 1 + .../test/tests/mesh_cut_2D_fracture/tests | 1 + 4 files changed, 41 insertions(+), 7 deletions(-) diff --git a/modules/xfem/include/userobjects/MeshCut2DFractureUserObject.h b/modules/xfem/include/userobjects/MeshCut2DFractureUserObject.h index d2b5c18972ea..c931cf40370f 100644 --- a/modules/xfem/include/userobjects/MeshCut2DFractureUserObject.h +++ b/modules/xfem/include/userobjects/MeshCut2DFractureUserObject.h @@ -59,4 +59,6 @@ class MeshCut2DFractureUserObject : public MeshCut2DUserObjectBase const std::vector * const _kii_vpp; /// Pointer to crack front stress if available const std::vector * const _stress_vpp; + /// Pointer to crack front critical k if available + const std::vector * const _k_critical_vpp; }; diff --git a/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C b/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C index 59aeb283d647..a0b141e61754 100644 --- a/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C +++ b/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C @@ -15,6 +15,7 @@ #include "libmesh/edge_edge2.h" #include "libmesh/serial_mesh.h" #include "libmesh/mesh_tools.h" +#include "algorithm" #include "CrackFrontDefinition.h" @@ -38,13 +39,22 @@ MeshCut2DFractureUserObject::validParams() params.addParam( "stress_vectorpostprocessor", "The name of the vectorpostprocessor that contains crack front stress"); + params.addParam("stress_vector_name", + "crack_tip_stress", + "The name of the stress vector in the stress_vectorpostprocessor"); + params.addParam( + "k_critical_vectorpostprocessor", + "The name of the vectorpostprocessor that contains critical fracture toughness at crack tip"); + params.addParam( + "k_critical_vector_name", + "The name of the k_critical vector in the k_critical_vectorpostprocessor"); return params; } MeshCut2DFractureUserObject::MeshCut2DFractureUserObject(const InputParameters & parameters) : MeshCut2DUserObjectBase(parameters), _growth_increment(getParam("growth_increment")), - _use_k(isParamValid("k_critical")), + _use_k(isParamValid("k_critical") || isParamValid("k_critical_vectorpostprocessor")), _use_stress(isParamValid("stress_threshold")), _k_critical(_use_k ? getParam("k_critical") : std::numeric_limits::max()), _stress_threshold(_use_stress ? getParam("stress_threshold") @@ -58,12 +68,19 @@ MeshCut2DFractureUserObject::MeshCut2DFractureUserObject(const InputParameters & getParam("kii_vectorpostprocessor")) : nullptr), _stress_vpp(_use_stress - ? &getVectorPostprocessorValue("stress_vectorpostprocessor", "crack_tip_stress") - : nullptr) + ? &getVectorPostprocessorValue("stress_vectorpostprocessor", + getParam("stress_vector_name")) + : nullptr), + _k_critical_vpp( + isParamValid("k_critical_vectorpostprocessor") + ? &getVectorPostprocessorValue("k_critical_vectorpostprocessor", + getParam("k_critical_vector_name")) + : nullptr) { if (!_use_k && !_use_stress) paramError("k_critical", - "Must set crack extension criterion with k_critical or stress_threshold."); + "Must set crack extension criterion with k_critical, k_critical_vectorpostprocessor " + "or stress_threshold."); } void @@ -82,8 +99,8 @@ MeshCut2DFractureUserObject::initialize() void MeshCut2DFractureUserObject::findActiveBoundaryGrowth() { - // k1 is empty (but not a nullptr) on the very first time step because this UO is called before - // the InteractionIntegral or crackFrontStress vpp + // k_vpp's & stress_vpp are empty (but not a nullptr) on the very first time step because this UO + // is called before the InteractionIntegral or crackFrontStress vpp if ((!_ki_vpp || _ki_vpp->size() == 0) && (!_stress_vpp || _stress_vpp->size() == 0)) return; @@ -107,11 +124,24 @@ MeshCut2DFractureUserObject::findActiveBoundaryGrowth() "\n cracktips in MeshCut2DFractureUserObject = ", _original_and_current_front_node_ids.size()); + if (_k_critical_vpp && ((_k_critical_vpp->size() != _original_and_current_front_node_ids.size()))) + mooseError( + "k_critical_vectorpostprocessor should have the same number of crack front points as " + "CrackFrontDefinition.", + "\n k_critical_vectorpostprocessor size = ", + _k_critical_vpp->size(), + "\n cracktips in MeshCut2DFractureUserObject = ", + _original_and_current_front_node_ids.size()); + std::vector k_squared = getKSquared(*_ki_vpp, *_kii_vpp); _active_front_node_growth_vectors.clear(); for (unsigned int i = 0; i < _original_and_current_front_node_ids.size(); ++i) { - if (_use_k && k_squared[i] > (_k_critical * _k_critical) && _ki_vpp->at(i) > 0) + Real k_crit = _k_critical; + if (_k_critical_vpp) + k_crit = std::min(_k_critical_vpp->at(i), _k_critical); + + if (_use_k && k_squared[i] > (k_crit * k_crit) && _ki_vpp->at(i) > 0) { // growth direction in crack front coord (cfc) system based on the max hoop stress // criterion diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i index 5ed27417069c..a221ccc5b9d2 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i @@ -65,6 +65,7 @@ kii_vectorpostprocessor = "II_KII_1" k_critical = 100 # stress_vectorpostprocessor = "CrackFrontNonlocalStressVpp" + # stress_vector_name = "crack_tip_stress" # stress_threshold = 120 [] [] diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/tests b/modules/xfem/test/tests/mesh_cut_2D_fracture/tests index df25fbf4a339..07e09cd91e4b 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/tests +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/tests @@ -19,6 +19,7 @@ input = edge_crack_2d_propagation.i cli_args = 'Outputs/file_base=k_stress_growth ' 'UserObjects/cut_mesh2/stress_vectorpostprocessor=CrackFrontNonlocalStressVpp ' + 'UserObjects/cut_mesh2/stress_vector_name="crack_tip_stress" ' 'UserObjects/cut_mesh2/stress_threshold=120' exodiff = 'k_stress_growth.e-s003 k_stress_growth_XFEMCutMeshOutput.e-s0004' abs_zero = 1e-8 From ab7fe500bb3597d28e92fe95a381dc74638904bf Mon Sep 17 00:00:00 2001 From: Lynn Munday Date: Wed, 18 Dec 2024 17:37:01 -0700 Subject: [PATCH 05/17] adding k_critical_material and vpp to sample this material at the crack tip. The lower k critical causes the crack to grow one element deeper into the bulk material in the minus x direction --- .../edge_crack_2d_propagation.i | 16 ++++++++++++++++ .../gold/edge_crack_2d_propagation_out.e-s002 | Bin 261924 -> 262352 bytes ...ation_xfemcutter_XFEMCutMeshOutput.e-s0004 | Bin 3880 -> 3912 bytes .../gold/k_stress_growth.e-s003 | Bin 154716 -> 154596 bytes .../k_stress_growth_XFEMCutMeshOutput.e-s0004 | Bin 3988 -> 3988 bytes 5 files changed, 16 insertions(+) diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i index a221ccc5b9d2..d1552599dd11 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i @@ -55,6 +55,14 @@ box_height = 0.1 execute_on = NONLINEAR [] + [CrackFrontNonlocalScalarVpp] + type = CrackFrontNonlocalScalar + material_name = k_crit_mat + crack_front_definition = crackFrontDefinition + box_length = 0.05 + box_height = 0.1 + execute_on = NONLINEAR + [] [] [UserObjects] [cut_mesh2] @@ -64,6 +72,8 @@ ki_vectorpostprocessor = "II_KI_1" kii_vectorpostprocessor = "II_KII_1" k_critical = 100 + k_critical_vectorpostprocessor=CrackFrontNonlocalScalarVpp + k_critical_vector_name = "crack_tip_k_crit_mat" # stress_vectorpostprocessor = "CrackFrontNonlocalStressVpp" # stress_vector_name = "crack_tip_stress" # stress_threshold = 120 @@ -117,6 +127,12 @@ [stress] type = ComputeFiniteStrainElasticStress [] + [k_critical] + type = ParsedMaterial + property_name = k_crit_mat + extra_symbols = 'x' + expression = 'if(x > -0.4,100,90)' + [] [] [Executioner] diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/edge_crack_2d_propagation_out.e-s002 b/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/edge_crack_2d_propagation_out.e-s002 index 85afb878496d11fb7fe5e77b77a5df845b943662..49976e1fe3c72916810cf777913db5173efda77f 100644 GIT binary patch delta 64543 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.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 T$A|X^ik@M`{jEG-%+CG~P?=#x delta 64097 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 A6#xJL diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/k_stress_growth.e-s003 b/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/k_stress_growth.e-s003 index 55e352d0b0ef3da41ce29fb1758bae93df2bcf4e..3387ca80ed5f74ba12aae3c6bd7369ceb4216422 100644 GIT binary patch delta 35185 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 Sk|obFV~=$OkH2!c|9=2@4u5h0 delta 35158 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 diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/k_stress_growth_XFEMCutMeshOutput.e-s0004 b/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/k_stress_growth_XFEMCutMeshOutput.e-s0004 index 5634e1e6dd21f3a7d038584f5d4dc9859c2647fc..75cd32a006757caa755059f8e6aae756ab3cdc06 100644 GIT binary patch delta 142 zcmV;90CE46ACw=kPX{UaKiQ|?Su)uXzueWp>aUL!Nzu}iiE4+jHKit{{ z#Yr_+>SrsK2G4dTK1#i3jwpx2yX@r2><{93IG5A2LJ#73zN_eE0cE*9e(sX(*OVf delta 142 zcmbOtKSh3nKfC4+`k=`+<)ilfmiDn1nhsn Date: Wed, 18 Dec 2024 18:05:34 -0700 Subject: [PATCH 06/17] adding test for CrackFrontNonlocalScalar to solid_mechanics closes #29575 --- .../crack_front_nonlocal_materials.i | 14 +++++++++ ...rials_out_CrackFrontNonlocalKcrit_0001.csv | 31 +++++++++++++++++++ .../test/tests/crack_front_materials/tests | 10 +++--- 3 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 modules/solid_mechanics/test/tests/crack_front_materials/gold/crack_front_nonlocal_materials_out_CrackFrontNonlocalKcrit_0001.csv diff --git a/modules/solid_mechanics/test/tests/crack_front_materials/crack_front_nonlocal_materials.i b/modules/solid_mechanics/test/tests/crack_front_materials/crack_front_nonlocal_materials.i index bed7040480c2..b1617b62618c 100644 --- a/modules/solid_mechanics/test/tests/crack_front_materials/crack_front_nonlocal_materials.i +++ b/modules/solid_mechanics/test/tests/crack_front_materials/crack_front_nonlocal_materials.i @@ -27,6 +27,11 @@ tensor_functions = 'fcn_00 fcn fcn fcn fcn fcn fcn fcn fcn' outputs = all [] + [scalar] + type = GenericFunctionMaterial + prop_names = scalar_kcrit + prop_values = fcn_00 + [] [] [UserObjects] @@ -47,6 +52,15 @@ box_width = 0.1 box_height = 0.05 [] + [CrackFrontNonlocalKcrit] + type = CrackFrontNonlocalScalar + material_name = kcrit + base_name = scalar + crack_front_definition = crack + box_length = 0.1 + box_width = 0.1 + box_height = 0.05 + [] [] [Executioner] diff --git a/modules/solid_mechanics/test/tests/crack_front_materials/gold/crack_front_nonlocal_materials_out_CrackFrontNonlocalKcrit_0001.csv b/modules/solid_mechanics/test/tests/crack_front_materials/gold/crack_front_nonlocal_materials_out_CrackFrontNonlocalKcrit_0001.csv new file mode 100644 index 000000000000..7555765066b8 --- /dev/null +++ b/modules/solid_mechanics/test/tests/crack_front_materials/gold/crack_front_nonlocal_materials_out_CrackFrontNonlocalKcrit_0001.csv @@ -0,0 +1,31 @@ +crack_tip_scalar_kcrit,id,x,y,z +10.012781609899,0,-1.2246467991474e-17,-2.4492935982947e-17,0.2 +10,0.041811385307061,-1.0677810676341e-17,-0.041582338163552,0.19562952014676 +10,0.083622770614123,-1.2055066943765e-17,-0.08134732861516,0.18270909152852 +10,0.12543415592118,-9.4739198571767e-18,-0.11755705045849,0.16180339887499 +10,0.16724554122825,-8.194486552889e-18,-0.14862896509548,0.13382612127177 +10,0.20905692653531,-4.38851051976e-18,-0.17320508075689,0.1 +10,0.25086831184237,-3.7843667304341e-18,-0.19021130325903,0.061803398874989 +10,0.29267969714943,-2.1474662175936e-18,-0.19890437907365,0.020905692653531 +10,0.33449108245649,1.2801044796052e-18,-0.19890437907365,-0.020905692653531 +10,0.37630246776355,5.519090206411e-18,-0.19021130325903,-0.06180339887499 +10,0.41811385307061,4.38851051976e-18,-0.17320508075689,-0.1 +10,0.45992523837768,6.4597630769122e-18,-0.14862896509548,-0.13382612127177 +10,0.50173662368474,8.1728772501941e-18,-0.11755705045849,-0.16180339887499 +10,0.5435480089918,1.1187705205776e-17,-0.08134732861516,-0.18270909152852 +10,0.58535939429886,1.1978853283323e-17,-0.041582338163552,-0.19562952014676 +10.017675097664,0.62717077960592,1.2246467991474e-17,-2.4492935982947e-17,-0.2 +10.025,0.66898216491298,1.1978853283323e-17,0.041582338163552,-0.19562952014676 +10.025,0.71079355022004,1.1187705205776e-17,0.08134732861516,-0.18270909152852 +10.025,0.7526049355271,9.9076007261709e-18,0.11755705045849,-0.16180339887499 +10.025,0.79441632083417,8.194486552889e-18,0.14862896509548,-0.13382612127177 +10.025,0.83622770614123,6.1232339957368e-18,0.17320508075689,-0.1 +10.025,0.87803909144829,3.7843667304342e-18,0.19021130325903,-0.06180339887499 +10.025,0.91985047675535,1.2801044796052e-18,0.19890437907365,-0.020905692653531 +10.025,0.96166186206241,-1.2801044796052e-18,0.19890437907365,0.020905692653531 +10.025,1.0034732473695,-3.7843667304341e-18,0.19021130325903,0.061803398874989 +10.025,1.0452846326765,-6.1232339957368e-18,0.17320508075689,0.1 +10.025,1.0870960179836,-8.194486552889e-18,0.14862896509548,0.13382612127177 +10.025,1.1289074032907,-9.9076007261709e-18,0.11755705045849,0.16180339887499 +10.025,1.1707187885977,-1.1187705205776e-17,0.08134732861516,0.18270909152852 +10.025,1.2125301739048,-1.1978853283323e-17,0.041582338163552,0.19562952014676 diff --git a/modules/solid_mechanics/test/tests/crack_front_materials/tests b/modules/solid_mechanics/test/tests/crack_front_materials/tests index 626bfd9c2976..2a931b82e176 100644 --- a/modules/solid_mechanics/test/tests/crack_front_materials/tests +++ b/modules/solid_mechanics/test/tests/crack_front_materials/tests @@ -1,10 +1,10 @@ [Tests] - design = 'CrackFrontNonlocalStress.md' - issues = '#27659' - [crack_front_stress] + design = 'CrackFrontNonlocalStress.md CrackFrontNonlocalScalar.md' + issues = '#27659 #29575' + [crack_front_materials] type = 'CSVDiff' input = 'crack_front_nonlocal_materials.i' - csvdiff = 'crack_front_nonlocal_materials_out_CrackFrontNonlocalStress_0001.csv' - requirement = 'The system shall compute the average stress at each crack point in a 3D domain.' + csvdiff = 'crack_front_nonlocal_materials_out_CrackFrontNonlocalStress_0001.csv crack_front_nonlocal_materials_out_CrackFrontNonlocalKcrit_0001.csv' + requirement = 'The system shall compute the average stress and scalar material property at each crack point in a 3D domain.' [] [] From 21d16da43e9eb2ad3bd4366a3b3803445b0bb666 Mon Sep 17 00:00:00 2001 From: Lynn Munday Date: Wed, 18 Dec 2024 18:06:22 -0700 Subject: [PATCH 07/17] adding parameter error if kcritical is defined with both a vpp and single value --- modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C b/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C index a0b141e61754..63bd2558dde8 100644 --- a/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C +++ b/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C @@ -81,6 +81,10 @@ MeshCut2DFractureUserObject::MeshCut2DFractureUserObject(const InputParameters & paramError("k_critical", "Must set crack extension criterion with k_critical, k_critical_vectorpostprocessor " "or stress_threshold."); + if (isParamValid("k_critical") && _k_critical_vpp) + paramWarning("k_critical", + "k_critical and k_critical_vectorpostprocessor are both set, crack growth will " + "use whichever value is lowest."); } void From 908a0496e31c8976042181adc0b9e6e3d36958fd Mon Sep 17 00:00:00 2001 From: Lynn Munday Date: Thu, 19 Dec 2024 09:27:32 -0700 Subject: [PATCH 08/17] clean up function signatures and doxygen --- .../CrackFrontNonlocalMaterialBase.h | 15 +++++++++++---- .../CrackFrontNonlocalScalar.h | 7 ++++--- .../CrackFrontNonlocalStress.h | 8 +++++--- .../CrackFrontNonlocalMaterialBase.C | 15 ++++----------- .../CrackFrontNonlocalScalar.C | 10 ++++------ .../CrackFrontNonlocalStress.C | 8 +++----- 6 files changed, 31 insertions(+), 32 deletions(-) diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h index 4275a810e0b9..8b246d0b595b 100644 --- a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h @@ -14,9 +14,10 @@ // Forward Declarations class CrackFrontDefinition; /** - * This vectorpostprocessor computes the average stress scalar normal to the crack front at points - * along the crack front. + * Computes the average material property at points provided by the + * crack_front_definition vectorpostprocessor. */ + class CrackFrontNonlocalMaterialBase : public ElementVectorPostprocessor { public: @@ -69,6 +70,12 @@ class CrackFrontNonlocalMaterialBase : public ElementVectorPostprocessor * @return 1 if point is within the box, 0 otherwise */ Real BoxWeightingFunction(std::size_t crack_front_point_index, const Point & qp_coord) const; - - virtual Real getQPCrackFrontScalar(const unsigned int qp, Point direction) const = 0; + /** + * Determine whether a point is located within a specified crack front oriented box + * @param qp quardature point to get material properties at + * @param crack_face_normal normal direction to crack face + * @return Value of material property at this qp and direction + */ + virtual Real getQPCrackFrontScalar(const unsigned int qp, + const Point crack_face_normal) const = 0; }; diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalar.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalar.h index 8756cddb8871..bb7281a3d25b 100644 --- a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalar.h +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalar.h @@ -12,8 +12,8 @@ #include "CrackFrontNonlocalMaterialBase.h" /** - * This vectorpostprocessor computes the average scalar material normal to the crack front at points - * along the crack front. + * Computes the average material at points provided by the crack_front_definition + * vectorpostprocessor. */ class CrackFrontNonlocalScalar : public CrackFrontNonlocalMaterialBase { @@ -26,5 +26,6 @@ class CrackFrontNonlocalScalar : public CrackFrontNonlocalMaterialBase /// The scalar material property const MaterialProperty & _scalar; - Real getQPCrackFrontScalar(const unsigned int qp, Point /*direction*/) const override; + Real getQPCrackFrontScalar(const unsigned int qp, + const Point /*crack_face_normal*/) const override; }; diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h index 7bd244b82c4a..0bb400c14c02 100644 --- a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h @@ -10,11 +10,13 @@ #pragma once #include "CrackFrontNonlocalMaterialBase.h" +#include "RankTwoTensor.h" /** - * This vectorpostprocessor computes the average stress scalar normal to the crack front at points - * along the crack front. + * Computes the average stress magnitude normal to the crack face at points provided by the + * crack_front_definition vectorpostprocessor. */ + class CrackFrontNonlocalStress : public CrackFrontNonlocalMaterialBase { public: @@ -26,5 +28,5 @@ class CrackFrontNonlocalStress : public CrackFrontNonlocalMaterialBase /// The stress tensor const MaterialProperty & _stress; - Real getQPCrackFrontScalar(const unsigned int qp, Point direction) const override; + Real getQPCrackFrontScalar(const unsigned int qp, const Point crack_face_normal) const override; }; diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C index 8702b9306032..83d1d0fe8b9f 100644 --- a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C @@ -8,14 +8,7 @@ //* https://www.gnu.org/licenses/lgpl-2.1.html #include "CrackFrontNonlocalMaterialBase.h" -#include "Moose.h" -#include "MooseEnum.h" -#include "Conversion.h" -#include "libmesh/string_to_enum.h" -#include "libmesh/quadrature.h" -#include "libmesh/utility.h" #include "CrackFrontDefinition.h" -#include "libmesh/utility.h" InputParameters CrackFrontNonlocalMaterialBase::validParams() @@ -87,14 +80,14 @@ CrackFrontNonlocalMaterialBase::execute() // icfp crack front point index for (std::size_t icfp = 0; icfp < _avg_crack_tip_scalar.size(); icfp++) { - Point direction = _crack_front_definition->getCrackFrontNormal(icfp); + Point crack_face_normal = _crack_front_definition->getCrackFrontNormal(icfp); for (unsigned int qp = 0; qp < _qrule->n_points(); qp++) { Real q = BoxWeightingFunction(icfp, _q_point[qp]); if (q == 0) continue; - Real scalar = getQPCrackFrontScalar(qp, direction); + Real scalar = getQPCrackFrontScalar(qp, crack_face_normal); _avg_crack_tip_scalar[icfp] += _JxW[qp] * _coord[qp] * scalar * q; _volume[icfp] += _JxW[qp] * _coord[qp] * q; } @@ -143,8 +136,8 @@ CrackFrontNonlocalMaterialBase::BoxWeightingFunction(std::size_t crack_front_poi // crackfront coordinates are: // crack_node_to_current_node_rot[0]= crack direction - // crack_node_to_current_node_rot[0]= normal to crack face - // crack_node_to_current_node_rot[0]= tangent to crack face along crack front (not used in 2D) + // crack_node_to_current_node_rot[1]= normal to crack face + // crack_node_to_current_node_rot[2]= tangent to crack face along crack front (not used in 2D) RealVectorValue crack_node_to_current_node_rot = _crack_front_definition->rotateToCrackFrontCoords(crack_node_to_current_node, crack_front_point_index); diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalar.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalar.C index 46851d827aa9..e5d4a18c0c54 100644 --- a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalar.C +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalar.C @@ -8,10 +8,6 @@ //* https://www.gnu.org/licenses/lgpl-2.1.html #include "CrackFrontNonlocalScalar.h" -#include "Moose.h" -#include "RankTwoTensor.h" -#include "libmesh/quadrature.h" -#include "RankTwoScalarTools.h" registerMooseObject("SolidMechanicsApp", CrackFrontNonlocalScalar); @@ -19,7 +15,8 @@ InputParameters CrackFrontNonlocalScalar::validParams() { InputParameters params = CrackFrontNonlocalMaterialBase::validParams(); - params.addClassDescription("Computes the average material normal to the crack face."); + params.addClassDescription("Computes the average material at points provided by the " + "crack_front_definition vectorpostprocessor."); return params; } @@ -30,7 +27,8 @@ CrackFrontNonlocalScalar::CrackFrontNonlocalScalar(const InputParameters & param } Real -CrackFrontNonlocalScalar::getQPCrackFrontScalar(const unsigned int qp, Point /*direction*/) const +CrackFrontNonlocalScalar::getQPCrackFrontScalar(const unsigned int qp, + const Point /*crack_face_normal*/) const { return _scalar[qp]; } diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C index 13a8866c1714..1edde8cf8c7c 100644 --- a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C @@ -8,9 +8,6 @@ //* https://www.gnu.org/licenses/lgpl-2.1.html #include "CrackFrontNonlocalStress.h" -#include "Moose.h" -#include "RankTwoTensor.h" -#include "libmesh/quadrature.h" #include "RankTwoScalarTools.h" registerMooseObject("SolidMechanicsApp", CrackFrontNonlocalStress); @@ -30,7 +27,8 @@ CrackFrontNonlocalStress::CrackFrontNonlocalStress(const InputParameters & param } Real -CrackFrontNonlocalStress::getQPCrackFrontScalar(const unsigned int qp, Point direction) const +CrackFrontNonlocalStress::getQPCrackFrontScalar(const unsigned int qp, + const Point crack_face_normal) const { - return RankTwoScalarTools::directionValueTensor(_stress[qp], direction); + return RankTwoScalarTools::directionValueTensor(_stress[qp], crack_face_normal); } From ac56eb7321a7dcad7a0d59d1075e4c97be7230b4 Mon Sep 17 00:00:00 2001 From: Lynn Munday Date: Thu, 19 Dec 2024 10:28:24 -0700 Subject: [PATCH 09/17] adding documentation --- .../CrackFrontNonlocalScalar.md | 19 +++++++++++++++++++ .../CrackFrontNonlocalStress.md | 4 ++-- .../MeshCut2DFractureUserObject.md | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalar.md diff --git a/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalar.md b/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalar.md new file mode 100644 index 000000000000..c309193409ab --- /dev/null +++ b/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalar.md @@ -0,0 +1,19 @@ +# CrackFrontNonlocalScalar + +!syntax description /VectorPostprocessors/CrackFrontNonlocalScalar + +## Description + +This object computes the average scalar material property at the crack front points defined by [CrackFrontDefinition.md]. The main use case for this `VectorPostprocessor` is to compute an average fracture toughness or $k_crit$ at the crack front for use with the `MeshCut2DFractureUserObject` to grow cracks. This allows for spatially varying $k_crit$ values defined by a `Material`. + +`CrackFrontNonlocalScalar` computes an average of the material property over a box-shaped domain at each crack tip point that is centered on the crack tip and extends [!param](/VectorPostprocessors/CrackFrontNonlocalScalar/box_length) in front of the crack tip. The [!param](/VectorPostprocessors/CrackFrontNonlocalScalar/box_height) is the dimension normal to the crack face, and [!param](/VectorPostprocessors/CrackFrontNonlocalScalar/box_width) is the dimension tangential to the crack face. [!param](/VectorPostprocessors/CrackFrontNonlocalScalar/box_width) is not used in 2D problems. + +In the following input file example, the mesh consists of a 3D plate with a hole in the middle. The CrackFrontDefinition defines crack points around the center line of the hole, `boundary=1001`. This `CrackFrontNonlocalScalar` averages a material property named `scalar_kcrit` over each 3D box at each crack front point. + +!listing crack_front_nonlocal_materials.i block=UserObjects VectorPostprocessors/CrackFrontNonlocalKcrit + +!syntax parameters /VectorPostprocessors/CrackFrontNonlocalScalar + +!syntax inputs /VectorPostprocessors/CrackFrontNonlocalScalar + +!syntax children /VectorPostprocessors/CrackFrontNonlocalScalar diff --git a/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalStress.md b/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalStress.md index 2d8277c38138..67519780f161 100644 --- a/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalStress.md +++ b/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalStress.md @@ -13,9 +13,9 @@ where $\boldsymbol{n}$ is the normal direction vector and $\boldsymbol{\sigma}$ Data produced by this VectorPostprocessor is used in conjunction with the [InteractionIntegral.md] in the XFEM module by the `MeshCut2DFractureUserObject` to grow cracks. The `CrackFrontNonlocalStress` is useful for extending cracks that are approaching free surfaces because the interaction integrals computing `KI` and `KII` are affected when the integration domain intersects the free surface. `CrackFrontNonlocalStress` computes an average of the stress over a box-shaped domain at each crack tip point that is centered on the crack tip and extends [!param](/VectorPostprocessors/CrackFrontNonlocalStress/box_length) in front of the crack tip. The [!param](/VectorPostprocessors/CrackFrontNonlocalStress/box_height) is the dimension normal to the crack face, and [!param](/VectorPostprocessors/CrackFrontNonlocalStress/box_width) is the dimension tangential to the crack face. [!param](/VectorPostprocessors/CrackFrontNonlocalStress/box_width) is not used in 2D problems. Unlike the other stress integrals, like the [InteractionIntegral.md], that use the [CrackFrontDefinition.md], `CrackFrontNonlocalStress` is not set-up by the [/DomainIntegralAction.md]. -In the following input file example, the mesh consists of a 3D plate with a hole in the middle. The CrackFrontDefinition defines crack points around the center line of the hole, `boundary=1001`. This `CrackFrontNonlocalStress` integrates a generic stress field set-up in the input file over the box dimensions shown. +In the following input file example, the mesh consists of a 3D plate with a hole in the middle. The CrackFrontDefinition defines crack points around the center line of the hole, `boundary=1001`. The `CrackFrontNonlocalStress` integrates a generic stress field set-up in the input file over the box dimensions at each crack front point. -!listing crack_front_nonlocal_stress.i block=UserObjects VectorPostprocessors +!listing crack_front_nonlocal_materials.i block=UserObjects VectorPostprocessors/CrackFrontNonlocalStress !syntax parameters /VectorPostprocessors/CrackFrontNonlocalStress diff --git a/modules/xfem/doc/content/source/userobjects/MeshCut2DFractureUserObject.md b/modules/xfem/doc/content/source/userobjects/MeshCut2DFractureUserObject.md index 3343f303df2e..74e10dc2e11e 100644 --- a/modules/xfem/doc/content/source/userobjects/MeshCut2DFractureUserObject.md +++ b/modules/xfem/doc/content/source/userobjects/MeshCut2DFractureUserObject.md @@ -12,7 +12,7 @@ The crack propagates if the failure criterion is met, given by: K_c \le \sqrt{K^2_I+K^2_{II}} \end{equation} -where $K_I$ and $K_{II}$ are the mode I and II stress intensity factors provided by the fracture integral and the material property $K_c$ is given defined in the input file by [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical). The crack growth direction is given by the direction the maximized the crack-tip hoop stress, given by Equation 5 in [!cite](jiang2020). The growth increment is a user provided input given in the defined by [!param](/UserObjects/MeshCut2DFractureUserObject/growth_increment). The fracture integrals $K_I$ and $K_{II}$ are obtained from the [InteractionIntegral.md] vectorpostprocessor specified in the input file by [!param](/UserObjects/MeshCut2DFractureUserObject/ki_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/kii_vectorpostprocessor). Defaults for [!param](/UserObjects/MeshCut2DFractureUserObject/ki_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/kii_vectorpostprocessor) use the names produced by the [/DomainIntegralAction.md] which is the standard way to set-up the [InteractionIntegral.md]. +where $K_I$ and $K_{II}$ are the mode I and II stress intensity factors provided by the fracture integral and the material property $K_c$ is defined in the input file with a constant value for the entire domain using [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical) or from a [CrackFrontNonlocalScalar.md] VectorPostprocessor that samples a material property at each crack front point and is specified by [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical_vector_name). If both `k_critical` and `k_critical_vectorpostprocessor` are defined, the lower $K_c$ is used. The crack growth direction is given by the direction that maximizes the crack-tip hoop stress, given by Equation 5 in [!cite](jiang2020). The growth increment is a user provided input given by [!param](/UserObjects/MeshCut2DFractureUserObject/growth_increment). The fracture integrals $K_I$ and $K_{II}$ are obtained from the [InteractionIntegral.md] vectorpostprocessor specified in the input file by [!param](/UserObjects/MeshCut2DFractureUserObject/ki_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/kii_vectorpostprocessor). Defaults for [!param](/UserObjects/MeshCut2DFractureUserObject/ki_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/kii_vectorpostprocessor) use the names produced by the [/DomainIntegralAction.md] which is the standard way to set-up the [InteractionIntegral.md]. Near a free surface, the integration volumes of the rings used to compute the `InteractionIntegral` will intersect the surface, leading to a reduction in the fracture integral values. This can lead to cracks becoming unable to farther propagate as they approach free surfaces. For these cases, a maximum stress criterion computed using [CrackFrontNonlocalStress.md] vectorpostprocessor can be used for crack growth using an additional failure criterion given by: From 37401026e66607ec41ec769909c578d272032030 Mon Sep 17 00:00:00 2001 From: Lynn Munday Date: Thu, 19 Dec 2024 14:53:26 -0700 Subject: [PATCH 10/17] removed paramWarning that caused tests to fail --- modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C | 4 ---- 1 file changed, 4 deletions(-) diff --git a/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C b/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C index 63bd2558dde8..a0b141e61754 100644 --- a/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C +++ b/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C @@ -81,10 +81,6 @@ MeshCut2DFractureUserObject::MeshCut2DFractureUserObject(const InputParameters & paramError("k_critical", "Must set crack extension criterion with k_critical, k_critical_vectorpostprocessor " "or stress_threshold."); - if (isParamValid("k_critical") && _k_critical_vpp) - paramWarning("k_critical", - "k_critical and k_critical_vectorpostprocessor are both set, crack growth will " - "use whichever value is lowest."); } void From 22a9519fea7584fdbbc489f5e827dfb8e1c393d7 Mon Sep 17 00:00:00 2001 From: Lynn Munday Date: Fri, 20 Dec 2024 14:27:32 -0700 Subject: [PATCH 11/17] Fixing MeshCut2DFractureUserObject to use just stress based or constant Kcrit or kcrit from vpp crack growth. Added error checking and testing for these options. --- .../CrackFrontNonlocalScalar.md | 2 +- .../MeshCut2DFractureUserObject.md | 4 +- .../userobjects/MeshCut2DFractureUserObject.h | 9 --- .../userobjects/MeshCut2DFractureUserObject.C | 69 +++++++++--------- .../edge_crack_2d_propagation.i | 52 +++---------- .../gold/edge_crack_2d_propagation_out.e-s002 | Bin 262352 -> 0 bytes .../gold/k_stress_growth.e-s003 | Bin 154596 -> 0 bytes .../k_stress_growth_XFEMCutMeshOutput.e-s0004 | Bin 3988 -> 0 bytes ...t_uo_xfemcutter_XFEMCutMeshOutput.e-s0004} | Bin 3800 -> 3876 bytes ...ut_uo_xfemcutter_XFEMCutMeshOutput.e-s0004 | Bin 0 -> 3884 bytes ...ut_uo_xfemcutter_XFEMCutMeshOutput.e-s0004 | Bin 0 -> 3876 bytes ...t_uo_xfemcutter_XFEMCutMeshOutput.e-s0004} | Bin 3912 -> 3944 bytes .../kcrit_based_meshCut_uo.i | 10 +++ .../kcrit_stress_based_meshCut_uo.i | 23 ++++++ .../kvpp_based_meshCut_uo.i | 29 ++++++++ .../stress_based_meshCut_uo.i | 20 +++++ .../test/tests/mesh_cut_2D_fracture/tests | 42 ++++++++--- 17 files changed, 162 insertions(+), 98 deletions(-) delete mode 100644 modules/xfem/test/tests/mesh_cut_2D_fracture/gold/edge_crack_2d_propagation_out.e-s002 delete mode 100644 modules/xfem/test/tests/mesh_cut_2D_fracture/gold/k_stress_growth.e-s003 delete mode 100644 modules/xfem/test/tests/mesh_cut_2D_fracture/gold/k_stress_growth_XFEMCutMeshOutput.e-s0004 rename modules/xfem/test/tests/mesh_cut_2D_fracture/gold/{edge_crack_2d_propagation_xfemcutter.e-s0002 => kcrit_based_meshCut_uo_xfemcutter_XFEMCutMeshOutput.e-s0004} (50%) create mode 100644 modules/xfem/test/tests/mesh_cut_2D_fracture/gold/kcrit_stress_based_meshCut_uo_xfemcutter_XFEMCutMeshOutput.e-s0004 create mode 100644 modules/xfem/test/tests/mesh_cut_2D_fracture/gold/kvpp_based_meshCut_uo_xfemcutter_XFEMCutMeshOutput.e-s0004 rename modules/xfem/test/tests/mesh_cut_2D_fracture/gold/{edge_crack_2d_propagation_xfemcutter_XFEMCutMeshOutput.e-s0004 => stress_based_meshCut_uo_xfemcutter_XFEMCutMeshOutput.e-s0004} (58%) create mode 100644 modules/xfem/test/tests/mesh_cut_2D_fracture/kcrit_based_meshCut_uo.i create mode 100644 modules/xfem/test/tests/mesh_cut_2D_fracture/kcrit_stress_based_meshCut_uo.i create mode 100644 modules/xfem/test/tests/mesh_cut_2D_fracture/kvpp_based_meshCut_uo.i create mode 100644 modules/xfem/test/tests/mesh_cut_2D_fracture/stress_based_meshCut_uo.i diff --git a/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalar.md b/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalar.md index c309193409ab..86c7b2bbd5d3 100644 --- a/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalar.md +++ b/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalar.md @@ -4,7 +4,7 @@ ## Description -This object computes the average scalar material property at the crack front points defined by [CrackFrontDefinition.md]. The main use case for this `VectorPostprocessor` is to compute an average fracture toughness or $k_crit$ at the crack front for use with the `MeshCut2DFractureUserObject` to grow cracks. This allows for spatially varying $k_crit$ values defined by a `Material`. +This object computes the average scalar material property at the crack front points defined by [CrackFrontDefinition.md]. The main use case for this `VectorPostprocessor` is to compute an average fracture toughness or $K_c$ at the crack front for use with the `MeshCut2DFractureUserObject` to grow cracks. This allows for spatially varying $K_c$ values defined by a `Material`. `CrackFrontNonlocalScalar` computes an average of the material property over a box-shaped domain at each crack tip point that is centered on the crack tip and extends [!param](/VectorPostprocessors/CrackFrontNonlocalScalar/box_length) in front of the crack tip. The [!param](/VectorPostprocessors/CrackFrontNonlocalScalar/box_height) is the dimension normal to the crack face, and [!param](/VectorPostprocessors/CrackFrontNonlocalScalar/box_width) is the dimension tangential to the crack face. [!param](/VectorPostprocessors/CrackFrontNonlocalScalar/box_width) is not used in 2D problems. diff --git a/modules/xfem/doc/content/source/userobjects/MeshCut2DFractureUserObject.md b/modules/xfem/doc/content/source/userobjects/MeshCut2DFractureUserObject.md index 74e10dc2e11e..68abd14d33f5 100644 --- a/modules/xfem/doc/content/source/userobjects/MeshCut2DFractureUserObject.md +++ b/modules/xfem/doc/content/source/userobjects/MeshCut2DFractureUserObject.md @@ -12,7 +12,7 @@ The crack propagates if the failure criterion is met, given by: K_c \le \sqrt{K^2_I+K^2_{II}} \end{equation} -where $K_I$ and $K_{II}$ are the mode I and II stress intensity factors provided by the fracture integral and the material property $K_c$ is defined in the input file with a constant value for the entire domain using [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical) or from a [CrackFrontNonlocalScalar.md] VectorPostprocessor that samples a material property at each crack front point and is specified by [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical_vector_name). If both `k_critical` and `k_critical_vectorpostprocessor` are defined, the lower $K_c$ is used. The crack growth direction is given by the direction that maximizes the crack-tip hoop stress, given by Equation 5 in [!cite](jiang2020). The growth increment is a user provided input given by [!param](/UserObjects/MeshCut2DFractureUserObject/growth_increment). The fracture integrals $K_I$ and $K_{II}$ are obtained from the [InteractionIntegral.md] vectorpostprocessor specified in the input file by [!param](/UserObjects/MeshCut2DFractureUserObject/ki_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/kii_vectorpostprocessor). Defaults for [!param](/UserObjects/MeshCut2DFractureUserObject/ki_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/kii_vectorpostprocessor) use the names produced by the [/DomainIntegralAction.md] which is the standard way to set-up the [InteractionIntegral.md]. +where $K_I$ and $K_{II}$ are the mode I and II stress intensity factors provided by the fracture integral and the material property $K_c$ is defined in the input file with a constant value for the entire domain using [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical) or from a [CrackFrontNonlocalScalar.md] VectorPostprocessor that samples a material property at each crack front point and is specified by [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical_vector_name). The crack growth direction is given by the direction that maximizes the crack-tip hoop stress, given by Equation 5 in [!cite](jiang2020). The growth increment is a user provided input given by [!param](/UserObjects/MeshCut2DFractureUserObject/growth_increment). The fracture integrals $K_I$ and $K_{II}$ are obtained from the [InteractionIntegral.md] vectorpostprocessor specified in the input file by [!param](/UserObjects/MeshCut2DFractureUserObject/ki_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/kii_vectorpostprocessor). Defaults for [!param](/UserObjects/MeshCut2DFractureUserObject/ki_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/kii_vectorpostprocessor) use the names produced by the [/DomainIntegralAction.md] which is the standard way to set-up the [InteractionIntegral.md]. Near a free surface, the integration volumes of the rings used to compute the `InteractionIntegral` will intersect the surface, leading to a reduction in the fracture integral values. This can lead to cracks becoming unable to farther propagate as they approach free surfaces. For these cases, a maximum stress criterion computed using [CrackFrontNonlocalStress.md] vectorpostprocessor can be used for crack growth using an additional failure criterion given by: @@ -28,7 +28,7 @@ Quasistatic behavior is assumed, and an iterative approach is taken to repeatedl The following input file provides an example of a `MeshCut2DFractureUserObject` that uses fracture integrals to propagate the crack. In this example, crack growth stops before the crack grows through the right boundary due to the fracture integral q-function intersecting the boundary. A stress based crack growth criterion is used in conjunction with the fracture integrals by uncommenting the two lines containing `stress_vectorpostprocessor` and `stress_threshold` in the `MeshCut2DFractureUserObject`. The stress based growth criterion causes the crack to continue to grow through the right boundary, as expected. -!listing test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i block=UserObjects +!listing test/tests/mesh_cut_2D_fracture/kcrit_stress_based_meshCut_uo.i block=UserObjects !syntax parameters /UserObjects/MeshCut2DFractureUserObject diff --git a/modules/xfem/include/userobjects/MeshCut2DFractureUserObject.h b/modules/xfem/include/userobjects/MeshCut2DFractureUserObject.h index c931cf40370f..3b24735c3dac 100644 --- a/modules/xfem/include/userobjects/MeshCut2DFractureUserObject.h +++ b/modules/xfem/include/userobjects/MeshCut2DFractureUserObject.h @@ -31,15 +31,6 @@ class MeshCut2DFractureUserObject : public MeshCut2DUserObjectBase virtual void findActiveBoundaryGrowth() override; private: - /** - * Compute all of the maximum hoop stress fracture integrals for all crack trips from the fracture - * integral vector post processors - * @param k1 fracture integrals from KI vector postprocessors - * @param k2 fracture integrals from KII vector postprocessors - * @return computed fracture integral squared - */ - std::vector getKSquared(const std::vector & k1, const std::vector & k2) const; - /// amount to grow crack by for each xfem update step const Real & _growth_increment; diff --git a/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C b/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C index a0b141e61754..0d1735d440ac 100644 --- a/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C +++ b/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C @@ -56,7 +56,8 @@ MeshCut2DFractureUserObject::MeshCut2DFractureUserObject(const InputParameters & _growth_increment(getParam("growth_increment")), _use_k(isParamValid("k_critical") || isParamValid("k_critical_vectorpostprocessor")), _use_stress(isParamValid("stress_threshold")), - _k_critical(_use_k ? getParam("k_critical") : std::numeric_limits::max()), + _k_critical(isParamValid("k_critical") ? getParam("k_critical") + : std::numeric_limits::max()), _stress_threshold(_use_stress ? getParam("stress_threshold") : std::numeric_limits::max()), _ki_vpp(_use_k ? &getVectorPostprocessorValue( @@ -81,6 +82,11 @@ MeshCut2DFractureUserObject::MeshCut2DFractureUserObject(const InputParameters & paramError("k_critical", "Must set crack extension criterion with k_critical, k_critical_vectorpostprocessor " "or stress_threshold."); + + if (isParamValid("k_critical") && isParamValid("k_critical_vectorpostprocessor")) + paramError("k_critical", + "Fracture toughness cannot be specified by both k_critical and " + "k_critical_vectorpostprocessor."); } void @@ -133,34 +139,36 @@ MeshCut2DFractureUserObject::findActiveBoundaryGrowth() "\n cracktips in MeshCut2DFractureUserObject = ", _original_and_current_front_node_ids.size()); - std::vector k_squared = getKSquared(*_ki_vpp, *_kii_vpp); _active_front_node_growth_vectors.clear(); for (unsigned int i = 0; i < _original_and_current_front_node_ids.size(); ++i) { - Real k_crit = _k_critical; - if (_k_critical_vpp) - k_crit = std::min(_k_critical_vpp->at(i), _k_critical); - - if (_use_k && k_squared[i] > (k_crit * k_crit) && _ki_vpp->at(i) > 0) + if (_use_k) { - // growth direction in crack front coord (cfc) system based on the max hoop stress - // criterion - Real ki = _ki_vpp->at(i); - Real kii = _kii_vpp->at(i); - Real sqrt_k = std::sqrt(ki * ki + kii * kii); - Real theta = 2 * std::atan((ki - sqrt_k) / (4 * kii)); - RealVectorValue dir_cfc; - dir_cfc(0) = std::cos(theta); - dir_cfc(1) = std::sin(theta); - dir_cfc(2) = 0; - - // growth direction in global coord system based on the max hoop stress criterion - RealVectorValue dir_global = - _crack_front_definition->rotateFromCrackFrontCoordsToGlobal(dir_cfc, i); - Point dir_global_pt(dir_global(0), dir_global(1), dir_global(2)); - Point nodal_offset = dir_global_pt * _growth_increment; - _active_front_node_growth_vectors.push_back( - std::make_pair(_original_and_current_front_node_ids[i].second, nodal_offset)); + Real k_crit = _k_critical; + if (_k_critical_vpp) + k_crit = std::min(_k_critical_vpp->at(i), _k_critical); + Real k_squared = _ki_vpp->at(i) * _ki_vpp->at(i) + _kii_vpp->at(i) * _kii_vpp->at(i); + if (k_squared > (k_crit * k_crit) && _ki_vpp->at(i) > 0) + { + // growth direction in crack front coord (cfc) system based on the max hoop stress + // criterion + Real ki = _ki_vpp->at(i); + Real kii = _kii_vpp->at(i); + Real sqrt_k = std::sqrt(ki * ki + kii * kii); + Real theta = 2 * std::atan((ki - sqrt_k) / (4 * kii)); + RealVectorValue dir_cfc; + dir_cfc(0) = std::cos(theta); + dir_cfc(1) = std::sin(theta); + dir_cfc(2) = 0; + + // growth direction in global coord system based on the max hoop stress criterion + RealVectorValue dir_global = + _crack_front_definition->rotateFromCrackFrontCoordsToGlobal(dir_cfc, i); + Point dir_global_pt(dir_global(0), dir_global(1), dir_global(2)); + Point nodal_offset = dir_global_pt * _growth_increment; + _active_front_node_growth_vectors.push_back( + std::make_pair(_original_and_current_front_node_ids[i].second, nodal_offset)); + } } else if (_use_stress && _stress_vpp->at(i) > _stress_threshold) { @@ -175,14 +183,3 @@ MeshCut2DFractureUserObject::findActiveBoundaryGrowth() } } } - -std::vector -MeshCut2DFractureUserObject::getKSquared(const std::vector & k1, - const std::vector & k2) const -{ - std::vector k_squared(k1.size()); - for (unsigned int i = 0; i < k_squared.size(); ++i) - k_squared[i] = k1[i] * k1[i] + k2[i] * k2[i]; - - return k_squared; -} diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i index d1552599dd11..989ccfeb60b8 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i @@ -46,39 +46,17 @@ used_by_xfem_to_grow_crack = true [] -[VectorPostprocessors] - [CrackFrontNonlocalStressVpp] - type = CrackFrontNonlocalStress - material_name = stress - crack_front_definition = crackFrontDefinition - box_length = 0.05 - box_height = 0.1 - execute_on = NONLINEAR - [] - [CrackFrontNonlocalScalarVpp] - type = CrackFrontNonlocalScalar - material_name = k_crit_mat - crack_front_definition = crackFrontDefinition - box_length = 0.05 - box_height = 0.1 - execute_on = NONLINEAR - [] -[] -[UserObjects] - [cut_mesh2] - type = MeshCut2DFractureUserObject - mesh_file = make_edge_crack_in.e - growth_increment = 0.05 - ki_vectorpostprocessor = "II_KI_1" - kii_vectorpostprocessor = "II_KII_1" - k_critical = 100 - k_critical_vectorpostprocessor=CrackFrontNonlocalScalarVpp - k_critical_vector_name = "crack_tip_k_crit_mat" - # stress_vectorpostprocessor = "CrackFrontNonlocalStressVpp" - # stress_vector_name = "crack_tip_stress" - # stress_threshold = 120 - [] -[] +# MeshCut2DFractureUserObject are included in seperate input files +# [UserObjects] +# [cut_mesh2] +# type = MeshCut2DFractureUserObject +# mesh_file = make_edge_crack_in.e +# growth_increment = 0.05 +# ki_vectorpostprocessor = "II_KI_1" +# kii_vectorpostprocessor = "II_KII_1" +# k_critical = 100 +# [] +# [] [Physics/SolidMechanics/QuasiStatic] [all] @@ -127,12 +105,6 @@ [stress] type = ComputeFiniteStrainElasticStress [] - [k_critical] - type = ParsedMaterial - property_name = k_crit_mat - extra_symbols = 'x' - expression = 'if(x > -0.4,100,90)' - [] [] [Executioner] @@ -141,6 +113,7 @@ petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -pc_factor_shift_type -pc_factor_shift_amount' petsc_options_value = ' lu superlu_dist NONZERO 1e-20' line_search = 'none' + nl_abs_tol = 1e-7 [Predictor] type = SimplePredictor scale = 1.0 @@ -153,7 +126,6 @@ [] [Outputs] - exodus = true [xfemcutter] type = XFEMCutMeshOutput xfem_cutter_uo = cut_mesh2 diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/edge_crack_2d_propagation_out.e-s002 b/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/edge_crack_2d_propagation_out.e-s002 deleted file mode 100644 index 49976e1fe3c72916810cf777913db5173efda77f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262352 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

m 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¾XP_*=MQE4LLwH#zQk9iy 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 diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/k_stress_growth.e-s003 b/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/k_stress_growth.e-s003 deleted file mode 100644 index 3387ca80ed5f74ba12aae3c6bd7369ceb4216422..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154596 zcmeF(1yoe~-ahbQKqM6u1r?>oCEcMxJL z0tO)A|M~9u4fkBmz3(~eUF+WUf0xc$pR=F+%%0lwondBkq-Co%a+yq~20Bn3v_gZz z{K5i81}STqc67+dAit>Spa`7FPZh&PkMtW7GLly5^4hc>7Cs~>O4>l(1Pd+df0j7NZh7$25qlLz4CgZsH|JAtB3W<<+}R+VmlAMov!M3!lbK{xuE|;M^`5^_~(wU zuKad%b>+A7q)rpcu5V00Bz0wvgZ8DLvZVVgZ8tPDoLACi_0U(O^8zA5{Kf=DMumij zVO83vYR%QoE~fMUO>Yt$8XgcG5;oK?B0MB4+HY)lh@HZKaOoR1H&;Xw5OD}r7k7qe{kPTQk1b$DwfJ^$4L#{ zuYa?x-5i`p`<-?#%?Qnc>N!%~Hyyt=A)%qY142hD2S)WihD~XEx_UZ!x5IyEpZ@W> zRQvyLUYF{on@iV){q@J|QtjKnd0l)oWNqlWbZFm|U7PZ8(&M1h-@HE6<{jwz^yod< zkKUw42GHAe`F)HV*Yih@laKUR0>i_?f&!yyw&{wrKpRxItu4LhM30M5?qX>h&2GJ# zx02q$q*-^y=5+E+#DDap?f?1qRS%dpLZ+83oo3MXTGIAW(wiyWSNa*GI??40D_0gv z+y3Ew{D0UsZU8Q$x?XxirfpR>N>@kM+mwP#7Eg1m#jp3Tw)LTH`TeDLAi7@KPpZ=& z?r;1Yl&b6fi*1+CeNkO6?N+*8eNdhLaDSKNpj2J&Uu?USo)|6VJe2LW#(9_wpBeg{(c~B@rUbO=KqInRrl9W+DiGKKV0u} zlRs=r@9VT5swg*;{!81^HaIQ!#eekZMMxhy_zysu->P&jPV~Ic<^SS6g07NI%jvbE zKPDg)uWaS@(F+16x=y;DfAc=IkLL5AE=M~Lr@y$|rD$yPPnV+|iPK+PE}iz_KV6Or zoc`i+1z)j^zO=uj0p_19l$SG-uHkR*Gu2qErhR58?K9PNx(5v|x8Jn*b<+axx%BZ8 zCpE*v`0qbow%*^ptlgh4TmSD~w%MOA>+yFl+vCrd_58b+4f*qB8~okNPX6;{8~)wP zF8}jo8~xqO?*8*-8~@$Qo}tTD`RCbiQ(ag!tN&&;9{!8VmJQZlT=vtyxNO;A{m++` ztN)A3mJQZlT(-u)xNO;A{l#Tn|HWm?2J0^_+nO$`{F#fFv|n_fy$|228blHFWOo>p4}JYMJHRVe8;IMohJQ*L?rdmFJYI*CGe{-fwko)mS=7ZSvD{wg{hV&rMt6$sg?&5A8o0iwvwrq+Xkkb?lHYJQ!OXZ!>zTP@ugy| zk@u#01=(fGeX#})ZWae9RLf(@vVG@-8Vc1irN+c@l@%2gs^$6KF>6kx$rY+)>eA>_ z!()pTs^zs?5!jVE3f1z~tfP}N(?%;)%RAdW;*$4ADOAgQ=MHX;n>J+^H+Y}%FkE%c`83Y<>#gRe3YMu^3Q*{=lf63Z~5o5{PS1-`6~bXlz%?T@BiQX zTlu;w|2iuFx+(uUDgU}C|2il?_vPmN_k8pBuix{n{JB*A=TP~dJLP}Ql>fO>{^v;f zpBumDTlsn5_xrc%I5hn4@_^?SaRpQnF+K2d&-{QdJ% z`TgMc=RxK7zTfXB%J1>zzrX+fzN7r!`up>@@_5AW@0ZHsOus*$D37oF{ywifZua~8 zj`DcuuX4Of^**Rts=gnqma5}!s-^1tvTCXN+@)HozCWv$s^fC1<^N~LW6O?Hmp}f< zj~kR7r&S#fR2>K8%d+F%{Cip1aa{hnyzIDn`R{S6@6W0^Q!Q1;P5H9yxGz5rR(718 ze@|5Y_TnG^RU{coC)HAQ&hK^Qe)+vWlzZU+$~-8}@Ol2dRKBkN)BEA_YC5e^{9gWd z_QP#H-@lj2`TkGuhx@&xlj8UCzq216)5{3&C%>2fo&E4!I=xW*UeX@;&+mr}{{H=Y zseJ$bPw$79^`(>I_wv89A71gFm%o?FpO^pX{qSb2bW;3Y{&)7nJNmJV&nLf^|DFBt z;Ut|-DSj{iJNw}i|2+76sr)?npWYAr_s)vnOX)!4e|$fvK5t56j?eqQ*Oi~c|Bvhs z)$#aWbvZaZIyzkXa|plY9*7JXIxPCveCX1njt-Cbg&)0478(@%D?k0Rh|!^;^tVcW z)gk!({`dR+?^m6DdfdPI``@qp-2Z;;(jK6HpZ&*wuTB33o&L=?{e2wzxBm2ZW$5p_ z(BERAe`8L6cI0OAHF#7vluHXjrrz_~schH~W@BsQ7Bn_Y;G=j$91xlKKNAQ78&>6ZwSLg=ap$GJYUeFu*0R6p_zR(Z) z!vGivgTN2`ApizLAPj*Z2!^3B3_@TyjDS#}Z!2LC4)o!56huN4(C3)ZFb2j#4A5U~ z8V?g-B20o*U@pvq`LF;M!Xj7$4SQfO?1TMq0FvM!9D>7e1dhTnI1b5h z0#3pyI1M5&NP#nO7S6$WxBwU75~RXqxB^$<8eE4Pa1(C9ZMXw>;U3(F2k;Oc!DDy= zPvIFnhZm3r>5u`L@Dj4%6}*Nw@D|>|d-wn!;S*%TXUKtE$b&EN6~4iD$cF+bgdb1@ z#ZUsJ@RR>(1~n|@pbi>P0W_f^Xn{89fG+5PK2(CrU;u_t1*(D(RD+aUpVKqBmfU9cPWz+Tt~`{4j2!9h3#hv5hug=26WlHmlLgi~-DL|~8t zXW%THgY$3!F2W^9h0AaSuEI6A4maQ?+=AP12kyc>xDOBDAv}V|@C2U1Gk6X!APv$X z12W+yWWg(V4R7Eryo2}f0Y1Vf$cE351G$g~U*IczgYS?J1yBe-pa_bg1WMtj^2feh z4NEzwg9cOpO{fT3pba{p3wodrm7p>hfFV?Ys$c}wpgI_X3Dkg^Pzy|nEZFcxB99E^tvFcBs}EKG(eFcqf3beI7% zVHV7WIWQOI!F*T%3tw%02^TwY=$kc6}G{4 zNPr!X2s>dH?1nwC7xuw^H~>j-5Dvj%I08rE7#xRWH~}Z&6r2VT7^J`%I1A_CJY0Z_ za0yc3GF*YHa1E}*4Y&!n;5OWWyKoQg!vlB-kKi#pfv4~cp2G`BgLKG%On3=d@CshT z8+Z%v;5~eRkMIey;WOkwF66-%_zK_PJLE$F6v7WEf?_CvQuwL-6HV%BSjs^iG@t@# zLPgL5ZO{Q-&;xy_1eL)64512C1tX{i)xj7{WO$SV z>AMN;r}RAq_fh(eg8M6dU%`EqzN_GVOW#{+U|ExQlxu-0?Rhj&faa0qQ8bf*Vjr*&XTub(HIa2T(`Z z6B+<@lp8`LppJ55@B->6H-V-=9pz>q0CkiV;0@GKZVoNLo9C8TwgT!Xw}v)A9p$#r z4ydEt9y$PZlskeCP)E5FbO!1ucY&@z9p!G&9jK$+19}2=lzTyMppJ4M@CE89_l15y z9p(No0I1Udbr=YPc-F+yk9U-{z#piitOEhy&$AwugMm8Al^_tPqig^}fI7-mAPA_V zYy`nT9p&mU6sV(Y0>gkh$~7SbsH04?JRGQ_OmjN|sH1ESp+FsFOBe~%QMQIKppLRF zgadVy?I8lFqwENyfI7;~5DC;#c7Z6Mj19g<^!Dyh4vImR->L@pWu|OT=Mi2wk zQTBpyKpkb8+wnjhWt!UwKpkaomL}CPt_12R4~JDi9c7x^)j%EPP*?-hQKq?F3)E2#gLOb1Wt!XdKpo`> z*Z|Z~rn%h+)KQLvO+X!Gn%m8=iRWl6w*YmNX>PXyb(F`zHlU6&&Fyxej&ckn0CkjU zZg&86l*dCNP)C{Ob|+9rndWvEP)C{Ob~jK*ndWv6P)B((>;>v5Pl0_v9p$O8AE=`| z4GsWxl&3=yP)B(N90ckp&xAuj9pzbY7^tH>8;$^Vl;^-vppNofI0n>Fo(IQ)x&<&F zlHml;3$Z-OJIagT6z?c6hSR*G90wxrD8~ci9pxpE0@P8axjh3ZJTJrYEKo;zIh+IP zD6fF?Kpo|kZ~>^JOmlk?sH04CdkLtcOmmwG)KR9ny$sY*rn$WW)KR9ny$aM(rn$Wa z)KT6D*MU09o8SgeM|m^c1nMYnfm=Ww<*jfVsH40M?f`X^x5Hhaj&cIr1L`R6fcrol zD9px0r2I?rEfzLo4<+G3j)KNYMxj-G|^NL}CPeh2C()7<6*b(Cpt3xGPxG`EF79c7x^A3z=D>re#L zQN97iKpo|qPy*CZz6GT~9p&5b6R4wnNBK2I>X2z})zo;0OmnLyS9a12-$zzgcG3(# zK-N%p(hNUDuAuCs8OGeIX(~HuhB3F&@mF-x3}bH9w3MAR!%va5m7O%h&yaPLoixMG zk#&`wG{Y~D^^~17!#@tHBebGrX zjJZ{-qU@v@#@tHBgV9Md{2J><%1)YL%(Ch@u{771W$AcvHEfSev#e&K?4-HIEKA3c z(W#DutJPF?s$=5P@nv+<3}@p!Q>cY?WSU#)xHCFwhI6o9N7+d;jJcJLN28NwI1lUQ z%1)YL%&nS*vXf>QbE{^l?4%jS+^ShAJ86b7w`$hPPMTrNt(uLplV%umt7fb0q#4HC zs@W+!X@)VkYWB)bnqkbXbQ~O=G{cx%>6o|!){$v$rQ_p{%1m=B9V>UjIx@|zbllvT zXDrlQct@FL*_C&cX_no1N10~Xop+RJmh173GR<;*-chDm_TU}mir~pR$~4Ojct@FL zxgqZ;(=0dQ9c7y3#=N6Uv+Tt?%KFfRca$-=YE5}ZxiU249c7wjfp?S*LBTu9G|S$+ zqg)l5^Nupjatq#7#}ad^))HFrY>Z`V-chDmZo@muHJ~l;DAO#r;~izpty+8DQO4Y= zb>JQ4+R%}AlrgtzKD?uB2Az0E*&I6ajxx=17od(Z&2m?ujsH0pT0)RToG|Pj5I?6Q5fj}K)n&lxt z9p#1)1k_P(1i?TZ<;E}+sH5x!!+<)iZQfC)S-!(N z%G=>C?iOWskYSiTi#KoS$@Ym$~4RGc}JOM`2+7L(=31F9c7y3PrRc{vz*O4 z$~4QLc}JOMIfr+YX_j+&N10|hk9U-5mcQ_h@?QKnh`!8@8^n&l!W=9y->gm;u_mP>g@nP&MX?7o8=W-Qm}R+!vXkZ-vn;Qm?4-HIEXy^Ooix{&WqCzqC(SixS+1q* zq`Af{%e9rAG}oAAxsI}v<{Gms*Hw1XTw|8yddg0kYs|7-U)f1>osL{d*{LDZEXyk^ zJ87;nkqwlcG}oAAxuLR?<{GmsucGXvxyCF@zrRN(&Gl=n8!0J6lja(;EdBok=%l&M!@9Y$lja(;EVod0(p+Pf<(A4$nrqCm+)CL= zbB$S+TPr(ht})AU8)YZWHD+0EtL&t?#w^S2l$|u!m}R-WvXf>Qvn+Q2N8CS}Ys|9T zN!dwrjaimED?4efG0XD0%8uq5V=0rn@QyO(R_@9>%Gf~e#yiUD;LbbBG|TmPN10~1 zKJO^gEPL>dGR?9l?fzX_h+xb(CqAI|6l-X_kF}I?86y38aD7(QR-cfc3Ki*NU2mZXHTpt2>N7(}g^NzA7 z1oDnD&GHc5QKnfA;vHq0 zj&e7c4AfEX4pV?S$~|BzP)E5ZOatmD_k!s_9p&CI1E}+bJ}?tz@!S{7*}S9N59aWW za(|f1JIVuK9`7g*g!#OqJO~!>jiMcz@SS-!+O$~4QVyrWFBe3^HYX_l|>jxx>i zRo+piS-!?Q$~4Q@c}JOM`3CPO(=6ZQ9c7y3TfC!8vwWL(lxddl@QyOg@?G9hrdhtn zJIXuYKJO^gEI;5KWt!!OyrWFB{D^myX_g=Jjxx>i6W&p#S$@hp$~4Q*ct@FL`8n?> z(=5N>9c7y3G~Q9BSx#4W(lOrt$S)xSG9e3}p)se@aVDHc$9d(ifVRPT^4I7vx6(E^ zkB~@ojJ(9aolr z0on%V$-knD=iA^sI?gQr2DA;%lYd9Igl~iM=(w{yA7~q#NB>`_bj*vk!FhBXTKfM) zX&anJ|G%ho3=FR|=@|7;bVYm{oJap3sdP*XuRZCQ^)PfLd>fo6FGY{nowN*P*nHFP44Lp;T7`IcT7p4YQQz(G1XYFKvVKXa=O`p0>et({XV13d-A{ z>sHr9w+iSs`T%Z2x^8VObpW>^UH42ZM?fgLil7U6poMM?;JrXP#*S^I^Kct<-L#E# z9^FPS=#8#2=tCtiKsN)XE6=0*piZ|<+u%I957IGJ+NLMqI;6`QVp#=n9nxi|Vc8YB z!DNW#xjVM0$~&B=ZiGCAuZLk74(nkZ;IYwhfAwlWj}ebey*j$JK#vjUNxuicw$e6q z9$g1rmbSrd(eHKCjRChwx20}^ZYt1i;yii`>U7^}8=OavK|02aZDe>(W!T@+laA+3 zhJ7f*K9u3U$Z%g|*e^2d4;l8o4Et4veJI1@mtkMYu&-peUKy@WhTE3mwqWq1yx|8Euh zS%z7W^@cv+3wZ6w`aypf00UtV_<=tJz+ec3ArJ(?FcgMC2n+|zxD2x*!#v3F{L3&y zvIrOjkq`yZFdD|dScrjfFdinrM3@AaQyJz}HU*}_G?)%EU?$9h*)Rv@!aSG{3t%BE zg2fOA@vsDz!ZKJ6D_|w8g4M7F*1|ei4;x@3Y=X_O1-8OA*bWJ>0}^2;?1J5}2lm1~ z*bfIF2@b*`I1ESNC>(?1kPIi_B%FfNAOeFFI0I+l9Gr&>a1ky+DqMyua22k>b+`dH z;TGJ6J8&27!F_lD58)9!h9~e8p22f?0cns98ITDtAq!r?Yj^{1;T^n(5AYE_K{kAb z9LR+{_yS+y8+?a+D1buv0Yy*@B~S`Kl`nni|1FRstAhqq08OX}TA&R&pbL7S50#)Y z7=R&EfvR8x)u1{Ug9+4tnotW&p*GY3GcX4Wummfx1{<&iJFo`_a0DlChPvPauHXjl zP!H;Z2Y5mQXb6pgK1HRA~`aypf00UtV_<=tJz+ec3ArJ(?FcgMC2n>f25DFt948kD-MnNP* zK{SkpF)$WlU>uBx2`~{RK`cy$DKHhL!E~4bGhr6YhB+`7=D~be01IIeEQUCUhb6ES zmcepZ0V`n@tcEqP7S_Rf*Z>=06KsYpuobq!c1VC7kO(_r7wm>Tuow2hemDS0a1ai` zVK@Ru;TRl;WHhfFV?Ys$c}w zpgI_X3Dkg^Pzy|nEZFcxB9 z9E^tvFcBs}EKG(eFcqf3beI7%VHV7WIWQOI!F*T%3tw%02^TwY=$kc6}G{4NPr!X2s>dH?1nwC7xuw^H~>j-5Dvj%I08rE7#xRW zH~}Z&6r2VT7^KMXLI63ag9cOpO{fT3pba{p3wodrm7p>hfFV?Ys$c}wpgI_X3Dkg^ zPzy|uIXn~3C0-}e=dKP| z;yp?F8GjqgQaq)YX?lL7*B!m~{x|4$X*TF}ORrgaz0zxyUZ?aLrPn9DHtBUquSt46 z(rb}khx8h>0DA4w>yBP?^m?P$8qKRKxI=yLgoe-0NXO%(=Zl`_L9hT$z+2RK&y+rYM`F1NaGUgbMS35=j7UF|=<)u``!OUWD#9-Y z*Yt~?q{lz*7k%(}*rWX1{pf}ItDZ*r)%&F%e^hj2P*jv(%&+S+CwaR{m z{8JF#RL?MqyE;U8Cyu`+Ta=|bQ+PdJQ}%W={mxA~39n~u*kOMvg|Etl*8_*??Qz*z zw*Km(MMeJ$jmp-uHoCq(5>$4mR>*v|@_OPS{O(D464Iw6B>Otx_e*^Jsrzc5hpuAT z`n|Dvg=)5K%GR&gj&JMrbw%0w5w}x)zqbujt&7_>8l5)t#P6<@C-Hoz+ZX1Zrr*;^ zC-HWBH;bXh`281Of4JaoVVkzuW$VvA*cLP%Ouv(tPGb5Bi(9M1DwVBg+UEFP$gjcVo(v_;TCTSG|)<|FOO$ZA|S3W&1;X>Gn9`>D%RH=V$iUc=Pqv;Ij1$ zXOAQcul%z0w0_~i?d#{2tv|i|$luM=yKMbo(!);Qo+p*9->p4t$wd?TU8QsquX)^e zoES&{&w_IO%=k6_;!^ruq;h?ygUgkH@kXk3VVmr1b^l3awrpWqX+FGc{eq|S(CY5n zRO{mK&iWq=#;266--=W-aM=5Y{rSo0#SK^d-cWfG^PC3^ajD<5Y`xUmW9p1*Ersv3 zMtFs0Tok@#XqFtY(igs+iEZz4xt;K>pVutmS(NbgT6%T8%SFPMZ}lxp7hV$blKYQu z_F|Ect7{aYmU>?JbbX0&>+M~Hx7){=ye>5qGEd3guB$Xrcr-Egpo`Zq;ll2bIySn# z;*L&k34_{A6mNy~dzZ9pgZS)XtBpMx-xaeow>a2r?kv7#t1=F*Z7+UY{W1P#3sdp) zG_UzvD_;|H&diM&bTm!O?c??7(%u_l?!wa(QfAB&b4Rr}C!Ag^=IZNr=+7#NIm0L1 zJN_h7{A@8I)@9OI@ssxBs79VK;`T{7Bq2vf`VUeSO3QA!`R_g`113 z_ptcyUYo?^qW7|_3(?}OJvTKYMr(-aOZ6x9SlC1SxIA^P-s39bcO8>49WP!Ke@=bc zZ1nm!Oryq+r&-^x3B`BwCVsfvR4DciKKMFlvQT1{evWm2FBE6L+q1e(HLDv|NE8a!{H*9LKP2Q2zwv1PZkh0Pqsy9S9qoi%uU?&B_bd_KuRJrd#&k;| zBV*&bhv5~4+pZ~k%O_tH*DW|WW=_1nc=u7>(z|n;ikXQ~T^e_B65kt}YzTg^So4GoA)-Ew8ukMLmdLH8EkOL1-=e-p_)s3)CCy?PuKvj=^D-hcNtG5778{f)yri{G2o^HJ;mLoBYR zANVnAIFs9JW$xXb%rps~6`yDMcs^A9-#`BPJBLOYM`8uwN()6v9?_STB4# zuxxa-4p~C3TQ`5TS4?#H?ad)-k)?&%&*K>pQY{k-1ai&|R)f9i4&et=wtRntoveGKSg-qtu zwO4VXKa+(&inZBp!DPD%IyMjK#bi&8*B;rpHVp4KRaqyAyYHoThR1+ z4W{Pccg?$GK2!5LyF)QIh^d7fNx9zk6jQq&dO&M>Fq0>Q26cUsz%;a{-?Mw8%`|O} z9-PrsWZKQzXk2L7l8y~&d~VWuOFxBd(6q0X>WRY7A5Z63wreAlt{&k1qsuv= zc>I_~24{4H!f3U{cMSIn-+DT&ON$vHe11J9sg^^Dka@3dgYAp<3Fl?|VlT$D7H>Ma zCMP>i6ki>@7j+@QU;Ny7SFIPflEp9kYZmrN#yl?{*ZauW!(zb!gU|Br2gM)3?r-YX zA0Za~j6XRw>8x0?EhA}vu8sI}c+d4eOqMg*9+&NdZoXw|$IT-a#@1%?hhj~O?{%1l z)*IvV9b2;s?KMpnjrhVempiUKe^6u<-xY7u7%+fox7@P4VCrb5vwlzJn2VQ~?icer zU#IS8`ogtGhUT?drHS<#w}{%tD({>(IXk8&GYEPa(s}eNX7Jl0;`}k!Lg0oO;)k%?3os$W-;y4-|x&u+ec?xEb_i*g7 z!p*Eo(S) z)zqU~nGLJGrlW1=4LQur(?&nL-UDX7?t4(e;(TUVC86O{_MTY{ynL#DmJzdceLc4K z5j|!fb~AB&m;S<|Z_6~or+EvhFCD6!(wZk^1k{h7Jf)8C%Kv>^o0iXoxA%Jm#NFO0 ze3T_RFPV5#_-wSre$nO=LT=6aop!RZLf(lRk8SOC317oXb29tMh40SO0vFU?E#zN4 zGO+K}Cqlu4OXejRcZK}hgJOTCfB?#wzoQ>ZX#0dM}Y+SMShQBbjf1M$V zE_jP6M^5K;KN=(6Ke#{7P8=`3tZ%Wz^jog@@r1l;QOB3!m${{b22SZJ7FMhtQ=#n( zvGn@lnW=hfm^`Axgs#UvunOA-Z-`c(!L+sO_DZ($VR{LA`J;b6W(LhSJvV8V%c}Ie zIHF2VUuG2d=9b0Pg{=AypU)-94_J+5*SZ$=tM{HtJC&8_bxUP*U!1zqk*ie zkm{FWkvI9f@Z3S;s#Aq!!aMH^Rm|Gk3SVxj&4?_TAr$Mmj1@my3O{^~`})2t6iR|# zxU6bpFO>G*H12lsD53aG%^|)`+=W87K`wU2n!=a9rbjy5pDDb4rDw5u(SG4rN{eap z!e@%FOf9YYp12?utiNzEIN~+aXjiqHbJBgLZx$amXa6}?wGUhL?wLC?8L=~BQ|cvF z`*6z^KL=K17V`>2nq~Vk>t^k$hJ8B4Y}4Zlb+yx(L&&=H=V#4$i8<>M4d+>l#y$)f;lF+Vk6K ztlnxv4fDF+n1_4MK?!Xgn8(4zrh)HFn5UNRv52=bm~KFXPpVEP)BD=;{;IjiW{Bix{SZKf$)DR7-|LZBhyva zO6W1C9@F{Ss=tw80n_O}C}FQtb*5vO<&_+-!*qsw$&GGnw7BwzFD43}y~ZZO_en zd5Sqs@7yWOcnot|UAfs|v!l#;lE}R5VUxCO2nyiBDO@YD{o_ z9``tynY7uF@?r5~X8fROBj;u7nekY^j)jXKF=JbMpVJqOS@nzqLkcc=vg&*Kt?m)9 zkyT%?a!AfLH&%U-Ti1mX9<%D_b+5IEyv&T-H_I%1d!Csz8P)MxR$o?Q;g`eD*Cw%= zgO?u(t0A&l5i37LRzJZ^6<+nLU7W~Frv`Y3KN!zU$6Y;f)$2Ah^_zaNXtzEy?Ok(} z#f&G+G^%Tz;0jHd>4kAl+o~qB+P#;zpX6%F>NuxXSXiLW%sO1yF#3+1nfHHMni*W5 zS-5F@?>JSDSz7nj6r%1iD_6^nMX&cW>*keajQC{CYisxcL$O%rU%Dqq-|C znB&c<3F5O8%&EW0m9-0wGiUv8mD)DcW_5Kdl%Bom$?6_4+vxhPC3Cs5aQ)6{G0ZY; zaMhe?vzV0`)AZV##Vq%XoSif#l3C8kuPHBdW0pfRf8H5+mRa`9KlN!0mOif|vSWKP z%Wfg7CR{OQmOYRvj-&HNyw&6SW=JritcE;mtA23_X z?A9f`?WCX2?A7hQX>9($?0ssCIhy6k?1#?C)2yR|pLd^*E;x3Q*$?mkF?Z-oW*;)@ z;+}mnWGAoc{hlsOz!|K>9I6?0(D zE4mGS%N!o%Gz_lq&K!PT-sVxg4Rfr&wTrOo8gq=yc{;gm40B9A5psF>2<9Yj+S4xa z33KwXwBEeXm^n=u6{))^jyWZK*>dEHFLO##E4r0?mN~65ecf@X4s#mhJbYJZbLOP> zDf2;K7;~I?cSf|L8FR?~p|i!(l{vKfF#3B(8)m;`*`b(SgP7f0>k@gZmdvjIq&iQ3(uHMQQ8yzZ`sVIFv@=ZeB7?x)Qm@(&6#cR#^wQILYVEz zJU^G-3z*yHW3Guql9}7C9Ys|_ikREl?kmT=-NW2gzxo^Hi4Aj~>NfjT6D)g~9Sm`P z&fJX_7ghddz}&>yu8}#J%&q(McVj=;G1tvrH?{SWm`k+2OWfw4tgem!+6$L!;pg1< zi>OVs|a!A+u~c@zGFc zD`wd_clo^G_RORCwbDA>Vwp#ajR%v%sxyyP9wVCfC}JKyHA>9hePkZ}#+%e1zleE+ zKkq*M?r!F>AmD&v?ltDIf5+j5yX4H{(Yfw%U(PU3&4&Gk-=4%gJ&SuzZaR;72F}&SDn*~~d*qP6pnV&;Cb+mzd?`0WH_`(qQIk zBZvOD_JEmrh3Xycp2})>w~hN?|CQDHTXuEpvug==8>%Cz~sFhhu&i~4ci>c zj;+sXe0@EBV3$FxM(&{DRq+1a@Lc5lyRTfa6c>0`Xvi9#53@)+oXr|u?eMVD8pawv z)9w7)FP$|k>~yk5^EIrIb-T`Sk*ipv0dG!jYOt0y+MGS;qr*McD7SLK#si#N4jSdAIg zNwBz8yptKej+&5qxD7L?SI4Au+a{*}bx_kM)9x_6P={G(+~zagU21;zsU4Z_ln*N= z1?Vu{9Ubd-8kNg*)8~XtZLh_2v*YhaB~=vj>hv+{yKjL)H_5t1n~Is@k4B}-e#9Fn z)FN+quGC+`)D#}K+cxhhyg8QQzXk6*6=qMlUl2G^eE)KEqm?=hn2u&Qt$M-`rZFIc zoxJmiRk}XoUAJ1RnBkB%71ZYCF~b7g*ns|K%p_y%r0&z(Gov$gq8H~>V&*NMb#iPo zm>FL?kmqxWK2*vxz(8^jb-!YFjV{%VTs-;lN zipd<^C_zzk$wWn+3uVXORmXjW+tVIBjGpjW$Ozt6^63Wsdm!l~Tyghp@bJX6vh~YH z;+yqamsz%ceQwUln_tR~KMS|-EH4@={Vf9JlRwJ{%rSD zvmU}tr?OV2yf8O!rq$TU)%hn%X3tiyz^JUrk{dX%;Yv7;K@RM*m z2T9#$&S5FOc>ghM4Z2f$dwJGy{{Nwj6Ck(dsy|HRn+4;L$9BI}$s_ge2!dx4J zD^640ROgG!5}Yp`GAR4~j+o$hR%_F2)3WpT+>7jDezffVi+k^Tyg0R`?D-TEmvyTB zDyUuA_N#VGI6rktj%r<4+}3K~{1)D2>jxvdrB}@RTDE>p%{1YH)q}G2o6A03E6VxD z{(iW&OUl6g{$=N<&(hoG-BK)De{JM2a@_i|-_HmiqwB8^49+b(Kle(;sg!y(%htc` zw;%L=E&UrZ=_C~1SUSz1GF=W7Ms z9pF(IB|NjQpkLKqU3mGTw(HF8r-g^^Q_Nd7nt<0`+}<%?vxFB7_vZSnA0%WJ7rL80 z))wB3QmfcyT1(-hrf=Th<-LR)*KUrEaS1}6(S~{X(=~)I@hu1JIod+_I(N6mwZ=_^ zukSa$?KUw%_6HuZ$(r#l&*u{{>HLJaT%R}vm;riO<9xG7|9Sz%`AHcrUi9kI-1U`OHG zz(wo3ZQW&&x(Eu-Rb*Jx!rM67_=PLedpkGMU~rE z7Ufjmtf&^a@c7S0>lDVqgy(iA4TVRU4Tdaxmn^){yHR7p&+WpK%};$SO5X_SPp@jl zowzByUN%qvv}PaSQ_9RX{YxT*yr<3sGj<&ozJIz@J!>4Yx~5QDwE1MsjNS^_{TlC#^QQ?v-EXJ%Oq(YZ zy_t8b_+e9_ptf&i^?@6NFU1RwMZH-feBQRwLguI;yjkP_tW&UukZ$+Gv3XG^;ZEt> z+?MyUh0|&EF73Z!B5ocN`{v2KDdM?jRfE@teid&{{TZ{z{F-=oP4wD#9dP`9pk9^O zA z331Ub@A@ce_*J~;m^W2Xd+7Wl3oc(&m`||0@37~j!Xjt-)#V*+g!A9K<~JQ2E1Wvi z@j;zM%Y=J}8pX`3Ge*d4Ju0KSb8q2e$C1Z}jp!6 z^;T%x)Er_NEjqxK}`_)X0nF6j#Sw^nz` zIyOil>)vPOfrHf*8jnX$n9^&3Lc3?!uBa<76#9$m4!(R}rZCv(e&wQTprVTGi%s_X zJ&G#(j-@VM!9c0^eIQUKCGQ{o+3ra@>(>l>a3MQ-i4Fho=?*hO3jk@Ta55k zX!h+;ujGfVqVlw-w%J|hD608&u6i%?yTY{MndnVvZxj|6Iz8XfBST@6_U2^s`41G1 z6(0L6E;^xbF(|qIc*OyQTVdO@Cy%>}@7uOLmHIhQ{94^Tq0r`(c-QlI=#Jre!kwvS zE8AX46h1xd)U?5uD?;Jx(r?uk_EE?W_YcW-n5NL$ay`xNRwG5FZJ~>fxvo`IX>TCKjpcJt~gjF(P1HR*ApqDIfU&RdqPA zvJ{4|X5VxVYoO3;wES3wieD5JHf`PCdAE^5W_Ko~&_gEV4@+&eYjl{9)3`>hx>w{v z)~nJP;(34JVV~qFiz5yQXQn=S{h?o+xUJHYp|yij#0xX`;Gf#J%g%hwzW}mmYj2xC^?5Unw*maNfM0&5kUb(5i=%0F(DWbQ6!0oAR?^W!m)4h5;&*+|``QJZkFKwB&_F9aV zDy?&p^FHLCT>5tP=3TvYZUR1R6hYZNMd)p;bFOO6%;vP^W zya;0;VFwk>{pKvszJS`|_3!H0Hl-`CHoe%NG7w2?b6ttM-|zi;k(4BV9s ziz6*hfIm`eLRj!K2+hpoa`AD3h-qCP8GjiF|AM!kL0Q08Dx%m=xdYf=ixDbIIDpC8 z@wv)5KAgPQ5lClp<&9GE2&n0QM9-(jF>x$6v~j(3}LPxFG**#iH}(nwG|&UGz#^bM#b+-q0- zII#mR?D=_mZB1#n5BE{=PD>Q2nrPe!~vT_vR0ocFme5jEL(_9 zDU)6U3JBg9(+-6l*Ia`0hZKM<{y>b+y=TCEleTt5Jhf;5z1Y;w)22{EOOrBpM#CMN^=~vvI5o!VEOm-)C`?rGy z<9zgHW>0*-hQy24Enc?-yBSF1!PYmXcNmqxiZzei6K?%%sHz)^dj@Z%D@c-Ltrpa={;HSd%Q zj2-9chzZWX-ofN^_mDF1#?3z*%`yOCZ%)cni#{OMxa=5I5dxBBTG8x@+8}p!*yQco z2vD4IH)Ngr2rA=_Z%?1@0}T;%7+g6G+Sjrqw~z|x{XP?#8J5vX`?-R zaT|9lGLrTi&6Qwvwl(PFR6JOHzWB=dVG>w%spUC+sspR6O`+5x0kE>#75t7_2`mfs zSTfV-!D1=>fuLO)SWwx|pM6sRWulStOR+yKw~ALjP;6Ip&n+}Kc#CUX1cS_OqH z5~-&GE;Z{@m99)AOp}K$lvY+T=hS%IB`jT;cl)Sv1t^y8Ufnm(56s%r*IOppv&@4*a*kz%8Gzkg*xI*Z#B&M6H7H z$rhQ~`xapGL+j+R+B7iRb1OmNYB-obBANKrCl40o2NznKJHfK}cWUe^HCRPwO->50 zfi=VFf(3>Ouy*UnW3osF>q7_JvwfDqTAj4|(%#2l^{D|H8x4V#s50G>*#uZxAJeu< z+ipMmy9%c)Z-TkjRpIp(4KQOUtnp&60+S9ilF1{1E&!{TnE1Ah>g8==n4OBDTL)Jd_3oj(UoPzP;Q1dn$h~Z8R8%MQGft&;pa+ zx5H~pGr%mQJyBK+gL$V=U&705u;iLxIaN*zRw^I3XFIjPnlFx)+4Bro6Q$PJ%qhW! z%UE~hi!RuROLdSdy#wnBg=0wpabWGuRms1;4pt9c?VWg?!7^i)P{eUEu(+RFIq@?E z%!BU?9J;g$W_qp2wQ>YZ8NPO0rgi}1G4iKf>uF$A^PE+vDHIGV_&BtLvcRBwOKvmH z3=CK+O$=VUfPTczRxYtnB762R%i|X3iF~iVUUBnZATqGlD?N_qEZsa;Lf7VFUfOXl zBxuuhoUrsj$E?Lc2B<=%>-87)faOEWB&DPVa9`0BvsKdqp`x4laRv4ume+GOUfm8P z8-DT#8is+KX4E-fjT%sl6g25_Uj*fi0nNyL(xCS8aM4)rPS6aE?g)BT3_5O3$~Oc9 zfZ!ay_jpPhpx4nNpD#6nf!6O51!rq8tP;&9@4pJhc6!WIjDcYC<$V8`ksO%qqk9;C zYa8!b&IYw#>tK0=JSin$7_5p5T0|V(z`B)OHW>W?n@4I{{$&rrmfsx@B?N)(PQJLO zbJ1W!>~|G#Uk4i&MZdg33$PY;a8W(=5v<5lwIz4>fyKx94bPYR!2Hy(i2B<@U}o5! z)Ftc!rrfWij;UpV@p|$YrOFr>Et1PqY99c@bu;m`f=6H|kjBU9We)}}MNh6aD1(0P zaL1KCnL)AE+tMv=0~XJg($e$TvC-7KheSUFB0EBIK=L82EfwQ{iErq1`&xDn88 z{9`}g5inq}Fmjye1H%OU@V7VIz?d~}mGkj?Fu7|f9AWbT%!GE!hZ)O*c|nSlT!9f- z?mx7Aa8n1Y9Tk{0hxovzL@;)i_aoT$d&F&u9|1cKNpU$hN3i3Z zg3Zhl;TyRMSm#+hS06SN*6q&>Zbs2^p>f zHfFQc-e+ULE7_lQugemIYx22FJFbHG8~&72?EWCt_E1WoL>hLfkfa!ns&3oKOp&$Z zMo@7c`PiE&1ZpFG=ejAk$CJzNNoBnPx5pDvv!S*gATSN2-c$+)6n5iec&9n&kL$~> zyd4EY7guY_St~GV;QyfR!V4xwN3PXVv4CkgBU!!ACYak)a#M0_f+guh)bPD|uv$yL zqefB#cD~lF-!s<#+o|;-pXsd9o^89C@`X=Q2rO*f3(w_}fjQfeg0|T&V7ee7l$vt~ zOa^I1Nh&13cz_}|B~}8AX1i~G-1TT1@8JyMH-0eG=4^Z&FAfG_YSTT#KS4jAW|I7~ z5@GJcP#E_YJ20MXzPCfrnlL3aZb01o7EGB42aXGN5k_6_#d<#}0yD0J4|8m>gdtNV zK~ddQFxxms9X~8c=r56ppsvvc^N-CN-}w%=AhL`hs3|N3mzs0~JQ0a>6=>*S%`BQbh>{Y>Xl!T82urUl1ZkR2*ZY(26L2KoX;y#?F; z4N)G$?mc&Vjl-b8*t0zt`jc@%#Qe{Wk*tMqoQodyHR_w`JKD*NwGuof#C1G3QN$I(UO+nJPMurRP(Rf3PShAN&Fj9;0wvJW$Q@~_)?qg zO)fYOU;5S~Gcymu7Yzqp<5U6Y9(Xq>9<&2G`)SO6$en|BD5&-6u7DO!^Xj&VG5yl6%bxh1*DAFp2;`bo* z%iqjsBi{wx(;-1?IbG1M#cWz$I}eTC(wiGPDo|0vw1%pmK_21U!j7r!IFA2k9`I(D z#VN<5t5EfnbvNIhIA~rvA(nE^7CL8+&n+C=fWB=0a#Qmr7-mn&Wg`uM(dW&fHZ1cn zzTQj0-|h-iG&y_dFL1;3+iUDWvs&`qqm0ASkF2D?DlS%Uk zEljU%-LTVCfvNrdW6$N!z(jz3p5EB>c6+=#$jGJ#!%0J)A3i>S{+ef!mmlXtH+zs* z+S%REx>MiD-!fy@ z4*tFl^IzXS?vMzDzh?CRVLG>Shn2z)N0>><9GFWFhpGB^zgJzoVZ7z)R7#QyjJ#WN zC0y%+LHd#CL&x->JC^=vId3Age7hI+ux=4Por(MXQ~Msgq4~XdHJ0N~eg4@}D0+SQ zDhbczpK?L1<6RQMwQgva;F7SXI1ashXP;KM2EZ^CRrrA@FBm&%AmIIaFHBCo)0z6Z z05dk{9_;99g}L|10V{}9)Ig#WztujpIa<1q6(QSj*GB23*Su@uS?fpMvI7oDno zFkJ9qqMV5W`l9T5I?vvLj!Sb$<}L#?@U%=8KfVm5dIzNz)-FKI(C<1K;pjj0`e#Yu z!^}(XnBl+QgN1sIfbI{*^w7b3n3nvp4fIK`y<JsSn99tV zKN>}VS>?7^>St;&|Ne5%hYrX8ZM^@q$L#nJn+9heOnWvMT(~_6<6XfuZQ<%LVmo3c zJ^mQ_;}7x1?_+_^v;BSVNBAX;oKxEOwx4I^)j-; zbg{v&%fePLE7{+7-9;1T)EXl%UbqAE#Ah4*G!y@?c9>s{(Tixj2y<~cZP zCrC4U%6p)qCUr{VIssl$U&vKdi~DE8`M)X;Ja-OqsoZA^Wl4i%6iW%vaI10js^#{0 ze&=jSF8NjXBC-7v$NTp%=-*F$or)Yrq&%qOZb`tH7bW@g`3o>%-cG)6zdcNL=9k-& zbimZ&%euqocwzeb0*}$pi!l9=iJiyf3rzEqIXIQL!4&sxrK;pTF!AKULygBOF!pIC zqnKX=Mp9NfACAkwklJ`eL6SH0Y79yq{745K1tR<9cDO*(WKQ0^n-o-%3Y;gnWkRlG z$)_i_7yhey{j>iLmvyBNK4oc#qMVv8mF@YpPk49Ez%NT^wnSXEMpV!~aNSy{FBN)d znR}m0dO}~JqjU9(Dj010Uj9LT9)`t_Bt)rl!U#!8tn@S)jGRbsSbrh~BQf49m)_gL zh;Vq^-heYOyk}C-^iu>3DeR%7@}7i#pW7cM$}T}qW9X^zY6Km{OC?RwZqTB=)j6Iw z0-v!${V_jVC>eXG^ldp9Qe^h;j@X#~XUFq@wR~{nMg;W-jYKHmCe=GL?FQwSzkAGB z9fO)TM(l1biqJII)WO7M2(9sfvc+;<(0=!j)-Nc9jt$G7xmWz4^TUtMiFO(2Y(Rp( z8AZ^km_ILSCIjtX<1VjK`$8MJUUP|i3^ZTb-E6u&KVCJfa1xMi9Oe@0`bWJ zzcX6~lrh`iFQeswvR&o}*T!-H@BH-6EqNJA$kP=?lFXqXLAm_w@oIRrll-RdwJ^Bo z9b-oq^!NJT|0#I=yB`1lBJekl{i7fL@Yz2);t#L=qbL6G+dsPEFP{6)sxST#nt${9 zKYHp9zyC{D{ln}3=!3s>*?-ReH!u66df5 z0P&j~XLu)m{wW(I^NN;V<5vCq`=ieV5>~eVkDu%QrtOPW!~Ze<=s)%R|0;!a&gBBW zJbx%^>4_2>7lQJDodxVtxlkSE_WaX}%TO2e>P3sI8#EfyQ?e>^LDSe8on!55XqKP~ zVbL9crr@uVK}_5G2L1c^j|jloEv}BDN{(&6$yA2u&~>Oh#opy6#19P`k!s-=cR}mz zs&+foIOyb1IG>We0X>X9eax5npf@PhB+=yp^ow3Ubx17@284zu?H^CTz+OiiswH3O z@2+3utNJ_s-G6-Mzv5@eb=W)^e&PXCcs()^8X<$mvm?^e9`n#1U!rFCN(*{!36Y-P zaDxHmJLo5A0u0NGH6@%ZfRWV}O{MdLFcu=)dCXl1#?Oro?{{5<39*ykKbZ@`gvE;- z%Rn<2Up8LXwtxGti0yx@GrTz$`naw^4L&i`Ok1%XfR^2-)n{LkL03d{6yvYg&>uWs z(?}u-!*{NmoJxp=G0UgIk9Hn}iH1N9))j; zR*tQC&*9qvE63*wUtxC9srjkf{~a6oU-E#o4wsi!t?f`gz}drI_8pov*JR$NlR)Rs z1e!P1DbW9cl99EKT_BegGV$Y8FD zgv-H!_rHttpM3wac)zN-^6I7H7F0$?7=FCY4lUdso`pQU&^6s;opyH)2C~O#Snnsm zNbY7p&e62(`SpZ#rc+)pt)br%)O8qU_vnb|pF%Ki9sWjP^7tP-|55s{iua#-L*e~L zzu3sB;dA{j+L&-rXl*#N`|Mdq=wWwEvc7p229?qxY2I7I$o8w5J!Bp*?(RFBiUwfv z_gRjYLk;lNv3ABjSD!8feI>5KSsOjVbPB2$%zjyo%3(Qj!YrJ_wRqu z0`Nd1v`RNN5#I6Gvs2|IL%C$X;KL;@`0V-lN&i|SG~81)Ieyd_ntOlMKf4_btxnGV zdE%4Mra&Q@CSwe3e!17*U(|xuMJm%&+J9O8{SRRNZ=Z%l#d`T^(r9?8!o(eLD;o0n zn10n#?|}R@g}96Nw%~2n;>xa*Opw1zdacFR^uK-Me`ow3fdKsB!GG(IzxeRqI^-{2 z{I?$Yiy!~3Oa9`?f9sRK`10R6oH5JXwEUB2}mL8pE|kcBWJM8)jOyuJhJFb(On4xc1`cjInzjpKmLYQBa1 zYb%JxZEfH}5hbEKob-05Y8Ij~pJ(l+KZnTM`g6(~6JT9doa$`j1DKb}d@1?p7<_Ij z{?U4fn>e)R?T3yXgT(J<`?DJ2Ly5nb_&en`+=(l99&|T6>>#d0NZwysVI(euB$dXB z+#rruti25L_zJH%hJAw`jly`+k#~VX{P5H6P)<;N0BrhCmM7aELgZwN^e0KqA}Su| zk23p?Bbqn*L!@P8h+fvxoi)iH?O49dwwIO`F;~Uj&<($Z*knVR{3h!WruR5L1mPac2Jt1iF7g9ab8uxQ`1*zWJ=brq{2dNaN$G$J3K}ww&Tbg+e%qPBP99I{GNs*hQ$`T z=@052Yi)z44_nIjJaZ;a>K_a>_SPY8(AHYq6$rsJKRt2Q;U3INd*)c)W*p|St+=lF zBnoen*|xDShp}LzYunpv9$1(~=Jid3z{|6@b@u+;=Ed&gn_1_pV5x=1z%Ak{ zta>x8^fFH(5;r0FMCC?ALE9Do!Jq`u)V}!Q;!}s1Xv%&$y3ioDi$6sN;_?x9lPVw<7 zJ!U!E+WM`;9n%hpvWMrJV2YHcg{wdMFxkDjtC=@3CVO*mP^(}Slh-Fk4*ONWA6Vt22IohlVU{EyS@jwWUy-fw~78f_D>+|(#cl@I_0lN%HV zZwJEb+A+ZWfj$!v)KE*SW6wh20@X3w!3(EUi1~F{)?0hTh?AYk zUvB$S5Vt-iJ=7AT!AubxqEhO#nD;(kbCn&;l_m zd)2f~v?>70Up|u_rQnYxxb$|uV{yl##wYpQbxkoJlU;D`ON2RE&tAO~Mv2*{m;~6q zU&34xa??Yd<(N-Qh~R+Iu~4_%H;Q;kENbOo5cG5ki=R~ZdF((f-s#X)|9r&-OI9v0 zwl#}ksnWq$J03(~X;tJ__c{nma~`wvc{z=x9G^{oNYlkT`-C*-_dmnpNzyykGf1$= zS%WK5@1iju_o>Y`Z6C~%6*2IL;}da1Ww?;PFc&8JS$y8GZz0Ml>TDSyOT@VMtw-#@ zFxt`G7UQU*iI}dZjV|VA5~qkMIspv+h`;57I4xZzEc$LR#&mp#SE`3==Wj;BP|Dqw z>rScggFW+b#El_D#uIZPSzrXw4TW#9o5v%Tv1n0O%e<{lxv*eb-y=Dj@KWPsS& z!*YMhEg(8hEn%V5+r)Na@}-BJ@|gSkDSgUn2P``jJU-c&ftC8x&+iQs#v)s3%GHJ= zSn{hOmrep;9*z6TvsVW&+lEk7iFGyR{z|L=mHi18u^Ht#D@}!WHZbun=4)WNT~n*; z{OnjU;d1*0n=e?oMrk~mF%YX(ynCHJu7}mHTU}JQwZocn9@VGMeZyKA-iL18yMT2l z=+A0i&&0YKRcSTOj95>bZ-#oL3+t`&kZ^{^VuDxFFu7GcCRnUY|CGLg_3jXTI~z){ zE~ipQ{4dw-`&j;b>~IdNTf8{we!CVc+gP4r{yl(q-8&)QdZHi8ti<;4Uq65qjtoYR zjSOMl-B$fZA6u~2zP+Mj~EwODcYQA^67=$A=s2r!TW}EsV<}e76R?>D9?)%7w;##QWup+0L(eH{rD@E7taNFOg?m!n(^>FA49!7__U*sFYYS z$_x8;%`yk;f96t6TD^x2W^bG{+ib)}JJkZ#Zcbq1NTq?k^PjQFM9NUriX1iz^wX`R zdWJ11it7%L{lJ#bZFUP^$-vfnlS8c?^4R9xt#0$EPuTVw-|YmgXl&<7Pd1iNjP3mP zF@92&#yPP$bCJeXa&PH9VMs6RX&Vpi3uGYoRwwhBB{H$}z2!U^h%8-uyB{p9BfHk4 z%6SyUNFQ#T+{+cQY94~6Bwg}I zTT-xQ<;mknU>F;O6nF=mNXBMvJn zu3Kt0{ZD7Gi~ND8&vkkW4Iw7iB#*VGTofOaMUB~81-}Qrh zcVOda#~$9|ZmfSkg4P6^VQtnsU5}DJV5R*`mY*sMv6!*X?UFue%tHGv{DQL;W~dE! zVwK;vOFO!FZuiV$(b(vb(5xz~-8!O0c1RU--mW&+J*^JKD;jTJJjsBuf)tG(C=h;| z9@HaD<|8T*pI{BnHNjN-=RIUT}pLdb-T{8#$P&OgklgwGFo3EU2i*m%%Xe#5djZ2+_SHu6sps zBav5%zgE?>k!1MWo7X6hBB_jH%HiSGXy=)OYQ^{=66KuRl{bPAH@pAul~YrQ%zY%x zr7RGWC})gxQBz^wrNE#3TS9ne_;aeetixySr9VHfb^n6`-(hb)Ps=T_0jgasDOhCAZYF1kitNS{YU5=R(zbVEh^qU6|H_tUr%vyM2YNq;Jn|Urw z8|6cJMs<_8p5&lSzraacclu3mF>^)a5xa~vKUgE4N5@mwDxM?pyqRe2QYIvCvF{Aw z*bGuRFZ{7fNEc}cEgl%)nn7A$1E@$ZbRwP3o@D8!Y^3}4 z>XUTlklN!H7x@>4kxF`-i%o?;lJVV2K4ue%gsZ-DSvgxF;eGZN&!@!^_aVpk*X|}D zQBuA#hu4Kj{HkP3r*#;TAG@a7dE+%wOHZM_yHbEOjC-H?{XC4cC42k(f}bJn%)5puoZ zn!PNF4C}*gsdR@TQw=rDa7zzaL>}NCI7f}FP3BnJLrx%@A9@aT$yCVZ@OSG;zcOTg zNr__C>@~7*U_R>@xPi>WWXX;D%aP%fF|$(p5Hg~^wRZW=G%}Lh7iezO1+x9GPA=C6LC1PVp@DSZFfu1?M6hv4hw$VRiNsE6^T(R@A zKWycMX|F#ZpXkrW>^9u5zEkOAevKbj^w%F?(H(+Z-_>}rM6pUv+|^Vp)t<8_%A^;| zk~XI2gzmwzBSD;UQ?giA@O1+3=K(Ag!C1fYFanG1iq9gw?S;AHi&T`OlZlHAbi>C} zJP_NiA0fJK%1H9)Yb9gVL8Ou_8dav5i*%LNY<6ypBZK!6yQ{?{k!j}m;=JTnWc52= zE-cRg*}MOs4Vbus9AkEoC`*4sdlmvd2Us{E_dT|06&>zqZ~hyJFvBm%`4wZB^LcLM zKvW%9ze0)J?r=L}H4)?yBGbG#^(S)E;Zu+9tVIri1`FhVN05`n9f#`2`;ptnv`<&4 z9nqeWt7f4gw~@o3@;)|X{fGw;b@fkDwsUn_!GX(uQU7qUuRdae@F`a%%Xe>mE&k$nU6 zW`vG%YbRpyt?*-&{pEO<#=fH*{V`ZMm9O^&F&L|BW!^pRy@jZ6`6W3R6~%jflnFN@LhE1)5FB2JRuZVmP{=5WkmsRtbd)^ ze1!b_kN-5Fxr6+ZFVt9fP$U1OEP_o68#*AK;l9N38hO!Md0+lii}pOHnmyXZg?3wu zeHGLjMOIwJ@qRbnBcpal>pN80NRKU_oXjHzDIb{@L{_;-oLijm^l%Yk_7zLo2#JBY zL!;xC`R|C&SI%ZCe))k-I%CgJy(`5YvTg(J!nD{lB{V&P;ETPgZU{L{AHZfWlzq}4 zdSIUz|8%X;0BpW4KTfxyfqh4c!v`xSu;sHt*XH|l*l(lt+^P==woZe)m#Td6zA9^D z71e9lj`Z#OZ!eqieg)HGg?44w-gj}gY#TG)uk|y+CoUfE{*|D^%u|8)4eT(M^R&l~ z*r%O6Wczy2O7EW$i`coO%vElCPbEKExtRcY0(P0cZeLc+f_?7I-DGyq#_m8hTmwSb zD`QI}?n*b_o0alibMhs2KankxcK#anrd~VMw(YlZK7C|wV9Xpg{&GIbXf+W#N={y; z6mQ2SW{#}vGLzWFDB@Mds5tgv;YnGqIfU&3bk46OW?^Gt?G-1pBiN2pyxP;h2z#>{ z1l#+hA_?dHjhBz-U>_Gd3u1^m)(<)Aa{J^dtlz1qw5WLw>xPBO(mX82hE4a(OC5G& z)1JQ9vHLZ!o?q;KKXHud4vvaPF0vy>;l?hDMonaRk5%rR>^chFflW2@$B`j-!L!$& zO|gqjKn^SM$oBtpO3CSwBvy)zJg_{mg^tQRsw-Ta1f29{&zo>f-x8 z5}i2`Z2nOT?HZXYywT~0)JncCm{I3!*C&YV$)!Wc5I>t9ysv}Ib;H9BKE8o$UF$8& z+icP9t|q>=Mj*R$sw z(s}tA(l)Blb^u9X`m8aeFMNZy?UCp99(X1$8TZ~IgF42SccNU7LH`P`+YvEj;CXzu zUHBu?KfJTV(T5hn+|pMiyA`AxrXg~ovH@uxq4%ECOGT>c>!e>w5K@@1yTKYxjU@A; z^mY}$MZ%o#U9~xR5o?lw)vd$nu-3U&8F_AtIOa5hrd}#y^3yA)pUPX|9VEBJ4}}0` zej@YG^7%E)RGw_?lfH_n$BlcXw&;o9-+auTd2S5r#fRCfCs+{I(dGF1$w9O;D$>VT zH5n=MoZa4wG!1Dd6y`CX7eof$c1v|Da>#7Y_3Pel>1)?Kygv z#!ylPxu<5!!RHa=)p*AC6P7?el`&HHFBl-7wZ4_Ko8Fk+qBXUcLXmjsJFV2=w0Ok+ z*k5fx+60MJJ~F1#c0{}0bWo=0{6MNZ=B|7>QH8Xe^JB~|03sX@I+nJ%D))Rk@09$o66`aGIq$8Ik5jFGTbbY`Q5aF3{-zZr)$4=n>Pg z2iI(8ZDHmeP7nByL+aw}&PAb{! zgjs~R44%u^HX##*Q}6Bhb&$359?69&p6%J2PD-y>jP@u-)5Mo4AoscaT@@Xq$Xk7w z%SomK`Ep&XiEB86{2Bv4EL?TK^3msAc}`u%!nbbA61goQm($}APqm^7sb3VL>Xel7WndxR@+hNzU$-BV z37?OCO>zt~y$Rj_rTPbEe@L9*4=ci42jwqC++@PsGEKMq@91F80y@g^;#ACXNpN9 ztuM%y>FVi}9tvc|U}e%>nuN^s`eTO|qmZEz$6R*n2c)N_=b%g6o}YO@=`boBgk&8w zJ5|TOBjG%;6sNjq#1gD)e8&GIEVEHGt#6SMXAHJ?*77)pDO7Gcy{XB=j1mzHt~Gv` z^+~56W02cD=Wq$buB`z_FjZqLJ3Pt0DQSH8N}?o_uI-i>wx( zF?~IA6FG8@b?~7o%c5F9`#mFqNCpm|!#!t(ZW24Oep7?BrDg-x z?Dr9oi+O~1y}0yqs-^^U$eeSg``L_`9EYT>Iv*k#HkOdbB!`f?jmFAS#Ug^=8j415 z6p*om)Mg-kBC;rA>^=E41lc(%u*-dLM-J*nk&nWZk>kuWF_Stc?=+z z`#yY%EKhK52Wd`1hKqJ$<7Z8_`^_r();A|4FB$C2MOT7E2n>we$)^#^bp024YEf8^ zzT+EmE0dUTG}eB$c0cil;NZ&8lWC>5{N$(9{s>swxesW{t+DB5mYz}qeebOiG z9e0i+O6#i^0&~d_U-FY8UY-CX>+4;u6hK6p1q}yYYdRuh#amhXjh-RWU3i6@C|(@nwwy(7V=2b|*Y+UKY+ucWz8>VFWMop6@(I~kgxr$(@*e5r zRmEMmVnedp`AMS9d5G74f8rhjLNu-qBi2mP;rq9X+7+B?kjGyseIQJYI7GY^DZ5LR zIQywYM#Ce6xLCG6cDG85xGX`e9v!10uJp$+GX`4`*XS89ytGszt`~SO4CRv%H=6RK zJmboUn_5DJC%&B^ZoK_rw7d8uajly@X1{SU@z!b#&&Fp>1 zp>Q@Mzw{b%KY8TC$k-V2VSbUvQ=5y;_6N%GIaOc-()wkW$F^9DEaAk3mIW*y#;Z6R zwu!mhhWWAzBM|wm)}rN>8MIT^<>r%D?~$sep3K}!0wNg9h-ps-A)~dYN7J0&BP$eR zdON-bInYGWpKJVx+}!J~H0`>8_Hh{v+sxq5@kt2$|PnBCOb|c!50MGp% z%ZM3%??6Tli2Z&5Hy$@d+`oS|&bJ660m`&m(N0bzEMmcQ+{zJ&2wa^E@zg;gm%2SG zKMEre@glW_ky0eQ=l9TdY!M`QDt|Y%@O{MpBF8&YffezGKL}fsBp{&|&FaDgA0(dt z<32TU+fMAfoWY>*8EH$eJ>g;PMW%}+As3O}7`L%-bim~3j@c8_D1gt0qu~B~ zV0=E=9zj z)x0rc6@@r_Uf{e54a8nI={gv91Mx83`?SR5f`pGBGz(l7KoV2^uTPAmBH6j3+t&5J zkdgxZ?oRbdq{?MVvByIhsUML`6AhI?nq+FRci6{}X28}CC1Yiz$@`5)&VL_LuiNwS zSEm9}<5E3A7w(Q!0-NYP?0b;1-_oVFIDVwOa(4M^L=;jdcQj>TVM2N`E~T{eN9N_U zS_4Z*kZ}PE9l=r>p{IFWRNvnt^|%AiJ@;HkyB=)EXuk0hiL(h+gekp4LZ!*vX72lt zuvI`-XjLQU}Soi-uJjjF)~rnX{*2BkBmeVUPp<1NBRQ+ z=`9A_2vPaYA1>BFdc8ZZXm*t&Ld_G+(`1}T|Bi;DmEpD>EFKNmHLZm#bq&b2cqfou znXIhcw?*V&cHyS3SO#(q5!CQ2sYb4^M%$ODC9vji@BDP7Pgo^Z(RsaI56kUdAP=g) zfkhs?ToP0_`M=t`^LVJ*{(G==$l}t4LwL1AVl-YSjHw^k zM)pMB#;7~B)HL}MHgvEbce!PTjoxQeWC*UorUeDZmN`ga3&mQ!px`5T?d1yE0i2Gl zYUw>fuMtgc#i5q%Z;EKjjmtSRem!+vnNI^%Hohr3NX)cd?ct&)2aB2eDS6 zYmD3;FY5jC>M$`kKCCHFqEy|hh}Da0BgaoK!>aNRvdhCq@j~5K8^de)@B;4Tre;rl z@a$y=Hf$dp!Lx)t-dRxp?wp-e;%P)H!17bJd_J z8@*~CCfi!!_4*+u%h@v6<{aM!B~?vq))Q)j;~!#7cg+#>&ce&PE_R$bu?XuVv~!;o zeuZ^D4L#bQ?}eAE%(+_35X39JOLiG=lE$lEs801Vio^zb5l2stM&K1sRIX^Sx6&l` zZ%*A8(MFS~#;JmPH_>MLEDr0jeMaMFIM#QcSxE-Wrly;P{E3<#815WeHWzb6`gZ&G z(y-`|M&5IEV=TUcxH*nW;kgFm9cuSy;Q2Of+5Oz7G4)B#0c+bhEbH%KH{<>-EIWna z$`i+j=Rdayv9h9m&S`%du6ijGOBfk#^o(NQ87pH@z{y3J|IOFI9rPhI@s_Tz@DUvi zdEB&OBu1k#%S>G3mxYCUle|_4sNnfpDtX~mf>?bhJkc>?CpP4>9WOYVi5;l_=kjh_ zE8e_!n?^fB1n;nHD|<7019nZHKf1E30lVDQUp`*^3A^;YrYkgg;_Z$-3&yP#@uqm= zC7E86rcC0figkNSvBS?s#8*7I3-uJvo-o;CYP_jlK;VauAxz(68H z$wZd)Uah7zOLgJ{m zbKW(vdSNs;-*Q)ciXr;0=%3tRWr#-H{mn`P*l1+@>SXy%)TBBoII$eg7UsOGiY^>3Y#s9;Fo#@duCD*DD@@g|u&FG=`kR3Wb}j2dMYomOIT!>OZ25-C{Lb$7ig^ z`}eP{FdIFH-O@f-d1>-v7nAuDQEkt$Yq7(ZSLSVaA4@}D?%Ei3xx>So65@$<6JNzk zJ@Ui~LLwpw)gQ3vvqXoiOc~6j>X#Ai@d}N|4|UkN)6rP+VwSdg80J>ua;m-Df_c66 z<=(a*#C%2W6MMcyWA5+et=~0b&`X0GexX_Iq@+ijK9-V7@xVDpz*`i)aOXgx;{nfYL zuis5NmDcQ-Fx-Us-Q=b_A6P^_d3{!zl5Bzn7=QY0(qxd&5ocx@3YTF)<+w*aMGVrl zuH&kRZwVI2@eA)$<0oC=$7e~Pg_!>@MVp)36v=10!&kk}0+?@RqRaV{j-+$CY^B_= zGv?)b%AM9_Ls|ljXJ4&t#k`S8J@LHVBzK)ku>a*0EEwp${>0RLehtiVz;h5_ex=HytU{C zdrW2k?~5(q`A}zv50o#RdS>buY!mMEb)V}XcDQrh;+dfdc5l=xSrX)ly>caF|8#nY zSDo$m_$cau%|ACsieW{(NXNsU-@iduNaO80T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5CDPyW&t$!)Umu^`5VZ#OFu?DqY;U{J^l3b1`A{}ZOSRf-1$gouVu;3IT%?ENcU!H z`x=alXm9axuSaXP6~+qi`Wck0K#KWhQfT%5RIZy6M~a53KJ~`)`XRk-POVWgdx-Eo z_mWQ@IcQ0T>#DbdB}Ag@?WeK#E6_~Ulx@xC8bo$#@-y+CF(P$EZENwmRHCGnT_0nj zNS1bAve=MoL;lF!)ZwAFn&>ClZfCz1CR%^#slDM6B}PXSrK4T;kQL^}dK>x7h?&pT ztshMF3AUCDd}h!_tgMhgfc_(5BH-%x=<;h~JKIY1UfM_G<>AXWVtbA35!e=`TN8w2 zqxqv9TE~$61>eo7Yl4X7T2rwTsqMr*BWlo;?Tr!@Rf6OrVoAcEuHP&(Tu3S{HB+PP zGrB9?E^>6}3b{SJ<8kyEest^J3|-G$SCnmRop7gVC3#qR%0cp|AIgg94-_`8B$@e# z*ClN_jq>l!Q<{jgBl(L?icA09H+k)rk5X(IcgC0QK(zA_dE6172u)|PFU=TqEDqdoSwKI zUdHJO14a_3*;@{urJAjuZNUD~btlen`tX(wRX>^?OXGAJf1~Y>Zn~7n>6alF^?$Tg zw+5&CW>xLw^n{F01*a$8Sch?XbXes+r^or}TR8oFt$8P>ySieIbGl!vY&)l)=j1eV zx^q>l9H(zdod3w_MxlZq^ScKIigCIye4QC*zlxLONlu^lvg2IOM3X>OIn|#TPtVv< z{Y_U-cQHewB@Oh4H{oo_@bcup7{vA(|0-@RO( zu)Zn0Q+V!*SR-3Kg_OAoYgAgxEr@!4AI<4Il0OhuN8shy5*5Vi-4SD+^_8&tR;I+e ztwgMP=WpM*BnYcPW=USK_T(LhSox|~Bnx;6i-@Wk?LGL<_}4HR?*yAV--d{Fbam?d z+_%o!_)<;l4wv>rtO9ZRj_X;3RircKjt?VNY2pL*5$f-!Yq?E9RKL|tgm?mGT52-ZM%G=@*MT%b(4*0t&5Qa$oDaA#v zNr4jgdsErf)c6U<`ebeLApP7sg=vD+cyOBMybzMObKN5M?djw}rr3>vN3A6Add9Ik z+ZK?-y*t&WTq#0VCuTlNy~s@h8wy2=pX^4N2gB~T^hl$tU7wwkk2#^-`~77TSq><3 z=RNu6Yzah@2<_<5t3e9og=0ws%uBb%xyv)>MiQ9cryWNey$|CwoA_17hF-@trs_GYaXDQ;7<#S0#Zr+Ulr0h)?Y|N9CCX1_i^;$E()-u!*(Rv&=BlOQ50uF3C+Fl0w~LWCZx=4mWxON}@oEc?F3lyc3sQIW zJ~pPt`*i|ow&dOSti*JB?d07$Hd|)uNA&8w%9`?3 z2)&!GCv*V(OsnEZ2u>gI-1Ehv<>+mLE|y)GvOss%pOwKq^5@}!KbmUFz9Nz_TI z)5?}Ax>7AV!jf4^by@blAZ@C}%Gqpce*VT8XOp9-mNE~>kDQSQ)2MSQ)d>@9MMXc?pr#hfOsalWfu%eUWW>lN9 zvO-&^eq<(IolCV~v%gLU)pCz#*5*(xWWiFSQ$43IshBz+pN=li>}sl6b3{ZqO$)rY z!UZw8oo3ECOFgd{7TTZNtr2tXVvU^v0KlP-g8nr1Qrpmg&nq4~(bH8yBbMvrX@ zHs6kz*7VgYyL1urpo?+5`Pa#LU<(2u00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JQJ z|4RV%{(L^L1qY4*+y`(Uz$&U0M-Fm2Vfn5bpX}@SO@;c z)&b^^=gWfztppO5GL z56A!W_@DC*|DNaP<0j8L_-p(>U+>SykNrB1@87RiurA`vadp)E#p(0kqt}1$pS-?* zJO6eY*VgDE)Vyk|u3n=!Vh*3VpXh6ZK8XH(J$Ke2#59+m_V^hSHG34aM(#F4t!vjP zcsWj>ce@Tgma^eRElYGNXD&-b?-MTWeIIoXwH5D97ty7o#-mH_e7fNI`}Oweg8kJe z55-YM&izYMwP?S`TgqkM@@p+XP5X;12V(P4>*Z{oU91uGw(iQPhO7wcIL>|&zh4g3 zjBth0^zp=0}VGM#IA~7tCqv4}OK_ZC(7mfv{bi#CI(wXwp_=zsm z7+e^2>%!>LrSX&0_}OcWL<}awR^!qiap67h&8q{10PAv-*LUB2=bn4#zT4MnTYG0w zAP@-Bh|;K_A?d227>TsX&4GxcrB%gtREst}2^-n8GOVSsgntBU!yHy^4k)8Zf=$&` zfWRH)Yh_R$Wgx^X7k-MZI-W21nBCTfDefYBg~y>8pxMiKz#aE^6idxeOtt}@80?(K zh7mFSwr0;(Cj1QsV>q7;Fz!opm_}K`(v&eZV{4{?y;2&%!@*a#Xb!JnuSx1=!qJQo z#WFR+QO3>8Fy%Hybq2r z?{A?4OE_7SRB)3TD0MVPM?ezPr+$=h8P&Fxk&HR+q?G>7j_$Us)2-U66IsW~I*saX zyQ!(Eg}DT9u3KnCSx=0oOpgq?VF(G4f@dL#-=vR-I`}^!S_6xk2|#AtxcgdimivsaNeq@qk?|p76&Up$g^; zPHW`Jh-rrS<5kjHBE0|kfL&|68p4K#OzNHq(s-<5rtuHt-p|!=EzKM|$t=igB`nxb zca#@>gZ>a_Byx)?otmznO6XbMM8JR(Lb_1H?`Vyh`ng2?*T@BGh{U+4UVbi7+jVk9 z!4*aA@@)J$MX+`9#lRQCy{F&;Nhd5?FRd}oeisdr3id2RreUZ<4tg7LS^v;1Vn=Xi zD$b=xp^)Ju4h3iNu6;TOmEz6%Tly^d*t_;H#ghPU(gA?{BhzvmKat&?*T3yJ@IZD4o+r*+yeqrYXFt_8R>|(`P|y6_wCo=2ai5<4De^4TSyz+j z+k%yhHj*mj0&JXrVV{4&e(^URTvPzR-FUCUdoF(S@eYf3PrNgVcP+ff;J=K(3Ov^E jfiL`^!xuXIp@T#4L`Vl0_WXRS#YP-|Z0N;@z)JED7SBR$ diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/edge_crack_2d_propagation_xfemcutter.e-s0002 b/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/kcrit_based_meshCut_uo_xfemcutter_XFEMCutMeshOutput.e-s0004 similarity index 50% rename from modules/xfem/test/tests/mesh_cut_2D_fracture/gold/edge_crack_2d_propagation_xfemcutter.e-s0002 rename to modules/xfem/test/tests/mesh_cut_2D_fracture/gold/kcrit_based_meshCut_uo_xfemcutter_XFEMCutMeshOutput.e-s0004 index 43596dcbcf0358fee72b4c320f9b45443c375c97..3d9592bf0840800e597f29c02d41580475f08a96 100644 GIT binary patch delta 488 zcmca1yF_k6xF9NRKPHHZY%{DP3nvree5o<;po9yJG%#!$|#NyPH_}tXu z4Cm64_|p9NinP?+b)xdKdnVetowxUi~o%0Tq+Etp)w>dt8Z;s~BCRczcfyqlil*r@@AWCBLA2v<%%g$39*;MXAbTcs6L;3r!m1zi7GX>aR zE8X>0rtbUxo6CL$S6%$M|IXC|uhuUJp6tUeB`3h{EtJM#|3Ku(*U550_7C(e+${RG z+dqihofua?ZE+(vNRKPHHZY%`!0~nvrGW5o<;R-PDxy)cEA0#N_OFqm=l9 zqWpry^u&_P{Ji*zwA9?>(vp(YBE3}IVgmyMBcRsF)=cJ1d>1B{FzGR|{h7Rk$)1s6 z@)IU~MwZDU%=U~tlS7#G8AT?y0NFB=k1#89Y5+9>0lUiN4@f+p$ucb7j3tvZz~mMX zIf>ODC=kG^&M5-X!dEi6fz_Q;0m|!`d;usY0OhTi#HPi>w_~ynh}ttbf=!Ey?*LGa zqc}4qb#elm5)7(YxblzvVPi0`zwA7@va|gX6#oG| zh@L%(H;;lIBGP|A#DbuZv*1k;J^6k!J8_#*YtQL}Hy>|)@AuxknM}5{Q0_MjqmML8 znkTh99@V7A!!YYpxz@*NCje8uR3~5%)*^0L& zL5Mk`{aD0B;tM`$kK8K7-DA%u9Bu%bbCL(#qX`dd@FvBS3*gDYu6QCC5i@N&pV)@A ze;{EJm$Ct-e5uFYhMk7X)_F5>!vJeTq=f}EjRa8}qO$>Oy1U5$szd?0p<-P{4ERaR{YX1qE+d;H19&*wGY?7Zji80~R@qj%np7x(6tW8zz z90bjgC+?4ybi7$IT7*x>1NML86$qQDgmkMmB|Tyd$dPK0`@9;O=oNNLTK!JCA=BR0!OV|HDxj+rEBp1~y&82I5M6N8j zvZ!5$P3=<$J0f2Wd^x;_3=fO%poZNw#@SDilH}!HDq#@tioo4QT#M8u)v;~7rA%x! zREZ@fv$$}1QNB*!p{tvVOoA{0*AFJz4 zJqSAnY{J`lYc*-Ysd@4H)Vzmbk+-Gl+sPMsX-Vgc8f&cP9nnDQ)7WX6>&uG1d)%3~ zK9rt3$jp2pjFe(BZ|$znj^FLSUfhjef1A4Zv-Rou@8#|HzgnL^zWw_0*>bU+;P>@o z=GF06i)g`ZqhU@u}Bv#x^PhhYm_1d7g72Ukz%1Bx^cX1Ce5YyMed|87vk1M zUFkY2w=P{MMEnOLih@Gc;vdkJ=bO1F-lmkc>-509&V1)PGv~~mJM#-m1F2LhO(jpI zNX2rcFMQjRMxDwj$CDybGNj2^vVPMORmZ~+_Bo9GpeiE+$WmiLCtV3phDzRy#hSaR zLGU@sb|R80wgsQoM^2Ue9?%zK4#x-0Rm}tLv6x4MvOzxe1b7P28=eSC_)O}q#kvu; z_ccu85<0+)Ew$L&h#fj&OEw}W@G&<`C4DRX@ddTnBlMFsH?WoCZ-_8(d?mJnMwQmK zM{!OK!JdjmC0BD?+P9fV%whhVXYV*3VomuGl&B3=Cw13;iuwg2zdlO|vsDuzWp3)G zhLxjSI3z)QZftIap;)scSrwj)>hnz{nt|Ans%sXVlt?Ero!6iOgCGm)?jzF2Jt%zTc8Hm=Ox7$f)i21tr6s;u?E_vO06*@j=7qZ}3Xox>d})NW`(tTCCz zh1-kzRx)QDc_k^nr>daw2mQz2f(D_FGfGnYO_inbQTKkte}Dzp*mex9)pM5~g~cA2 zw|mDjY0SyI*eCNIhc(}(j&FCpuxClGcY>6b$wkDxqYR`riA6m4u%hklcgO9|^Dm!e zF8*YmN<40V-I^{v8CYq5fBkoL@6(_5k1rp7y=kqsJL!p)=a)*Aj8na-|M9n}nG*Zy*VdIa)vtTUz8lU)y`KYcmjC|Fe?NcwXM5KX sz`qyoBD_=a&&C@RZ%4fOc#h{W=KnfyjP1qua=|Xih5q18ykbcH0gR|29RL6T literal 0 HcmV?d00001 diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/edge_crack_2d_propagation_xfemcutter_XFEMCutMeshOutput.e-s0004 b/modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_based_meshCut_uo_xfemcutter_XFEMCutMeshOutput.e-s0004 similarity index 58% rename from modules/xfem/test/tests/mesh_cut_2D_fracture/gold/edge_crack_2d_propagation_xfemcutter_XFEMCutMeshOutput.e-s0004 rename to modules/xfem/test/tests/mesh_cut_2D_fracture/gold/stress_based_meshCut_uo_xfemcutter_XFEMCutMeshOutput.e-s0004 index 2a0620c1070ccc87deb7e77b04350089dc5dbcf1..c4d301490d15f7aaf3b13b525761a202b2d7d871 100644 GIT binary patch delta 363 zcmX>h_d;$$xF9D30|Q51X>NRKPHHZQJuxGikz?Z#Yeos%;*z4&;^O$E#NyPH_}tXu z4Cm64_|p8zl1y5Y9huA+6E;^c6*Dq=On$?x&FKNu3?f{Y@leYlL zh{+FtWXxn9cIW&PTP!04?5~wU=$k8lKhNoQ-Vdei@7&dwn!m5i{sD)f+RKWo_75QD zlTU9x$j!#Mc?*X!8zblBD}2hbtUwdlfS3h{*`aI>APvHtlX>{%8963v@GAfSTH#x+ delta 321 zcmaDMcS3GLxF81u0|Q51X>NRKPHHZY%|05)cEA0#N_OFqm=l9 zqWpry^u&_P{JhEHOj?tjnM@cRHdineGcr0%e#5NI=>XIY1neb~6P`XEF<$HlxO510bn0IR;1?Ozr@Z zCX=@SNsGx3fTYc29(HF{4WVkL0Q+mDyWYywecyj`*{|TLi$C|@xq9H$`US!JA25mp zbZH4qu3?u_6JYliO5?D9AadmEWVs;w2l^In7Jb|8A4Kj>jH{n!|DZ47hJv2Z;)Cpr in~!iPvrT@@ry$A#bPpR8vjb@m=9sL(FF)CvUlsrvUR`DY diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/kcrit_based_meshCut_uo.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/kcrit_based_meshCut_uo.i new file mode 100644 index 000000000000..895bcda6a453 --- /dev/null +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/kcrit_based_meshCut_uo.i @@ -0,0 +1,10 @@ +[UserObjects] + [cut_mesh2] + type = MeshCut2DFractureUserObject + mesh_file = make_edge_crack_in.e + growth_increment = 0.05 + ki_vectorpostprocessor = "II_KI_1" + kii_vectorpostprocessor = "II_KII_1" + k_critical = 100 + [] +[] diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/kcrit_stress_based_meshCut_uo.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/kcrit_stress_based_meshCut_uo.i new file mode 100644 index 000000000000..3f82716f810a --- /dev/null +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/kcrit_stress_based_meshCut_uo.i @@ -0,0 +1,23 @@ +[VectorPostprocessors] + [CrackFrontNonlocalStressVpp] + type = CrackFrontNonlocalStress + material_name = stress + crack_front_definition = crackFrontDefinition + box_length = 0.05 + box_height = 0.1 + execute_on = NONLINEAR + [] +[] +[UserObjects] + [cut_mesh2] + type = MeshCut2DFractureUserObject + mesh_file = make_edge_crack_in.e + growth_increment = 0.05 + ki_vectorpostprocessor = "II_KI_1" + kii_vectorpostprocessor = "II_KII_1" + k_critical = 100 + stress_vectorpostprocessor = "CrackFrontNonlocalStressVpp" + stress_vector_name = "crack_tip_stress" + stress_threshold = 120 + [] +[] diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/kvpp_based_meshCut_uo.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/kvpp_based_meshCut_uo.i new file mode 100644 index 000000000000..9a8fec990188 --- /dev/null +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/kvpp_based_meshCut_uo.i @@ -0,0 +1,29 @@ +[VectorPostprocessors] + [CrackFrontNonlocalScalarVpp] + type = CrackFrontNonlocalScalar + material_name = k_crit_mat + crack_front_definition = crackFrontDefinition + box_length = 0.05 + box_height = 0.1 + execute_on = NONLINEAR + [] +[] +[UserObjects] + [cut_mesh2] + type = MeshCut2DFractureUserObject + mesh_file = make_edge_crack_in.e + growth_increment = 0.05 + ki_vectorpostprocessor = "II_KI_1" + kii_vectorpostprocessor = "II_KII_1" + k_critical_vectorpostprocessor=CrackFrontNonlocalScalarVpp + k_critical_vector_name = "crack_tip_k_crit_mat" + [] +[] +[Materials] + [k_critical] + type = ParsedMaterial + property_name = k_crit_mat + extra_symbols = 'x' + expression = 'if(x < -0.5,500,if(x<0.3,40,500))' + [] +[] diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/stress_based_meshCut_uo.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/stress_based_meshCut_uo.i new file mode 100644 index 000000000000..d34f08c47a87 --- /dev/null +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/stress_based_meshCut_uo.i @@ -0,0 +1,20 @@ +[VectorPostprocessors] + [CrackFrontNonlocalStressVpp] + type = CrackFrontNonlocalStress + material_name = stress + crack_front_definition = crackFrontDefinition + box_length = 0.05 + box_height = 0.1 + execute_on = NONLINEAR + [] +[] +[UserObjects] + [cut_mesh2] + type = MeshCut2DFractureUserObject + mesh_file = make_edge_crack_in.e + growth_increment = 0.05 + stress_vectorpostprocessor = "CrackFrontNonlocalStressVpp" + stress_vector_name = "crack_tip_stress" + stress_threshold = 120 + [] +[] diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/tests b/modules/xfem/test/tests/mesh_cut_2D_fracture/tests index 07e09cd91e4b..3bfcdfd6361a 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/tests +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/tests @@ -6,27 +6,49 @@ 'where the crack is defined using a topologically defined surface cutting mesh by MeshCut2DFunctionUserObject' [k_growth] type = Exodiff - input = edge_crack_2d_propagation.i - exodiff = 'edge_crack_2d_propagation_xfemcutter_XFEMCutMeshOutput.e-s0004 edge_crack_2d_propagation_out.e-s002' + input = 'edge_crack_2d_propagation.i kcrit_based_meshCut_uo.i' + exodiff = 'kcrit_based_meshCut_uo_xfemcutter_XFEMCutMeshOutput.e-s0004' abs_zero = 1e-8 map = false # XFEM requires --enable-unique-ids in libmesh unique_id = true - detail = ' and crack growth and direction is computed by a fracture integral.' + detail = ' and crack growth and direction is computed by a fracture integral with constant fracture toughness.' + [] + [kvpp_growth] + type = Exodiff + input = 'edge_crack_2d_propagation.i kvpp_based_meshCut_uo.i' + exodiff = 'kvpp_based_meshCut_uo_xfemcutter_XFEMCutMeshOutput.e-s0004' + abs_zero = 1e-8 + map = false + # XFEM requires --enable-unique-ids in libmesh + unique_id = true + detail = ' and crack growth and direction is computed by a fracture integral with fracture toughness sampled from a material at the crack tip.' + [] + [stress_growth] + type = Exodiff + input = 'edge_crack_2d_propagation.i stress_based_meshCut_uo.i' + exodiff = 'stress_based_meshCut_uo_xfemcutter_XFEMCutMeshOutput.e-s0004' + abs_zero = 1e-8 + map = false + # XFEM requires --enable-unique-ids in libmesh + unique_id = true + detail = ' and crack growth is a maximum stress criterion and the growth direction is in the original crack direction.' [] [k_stress_growth] type = Exodiff - input = edge_crack_2d_propagation.i - cli_args = 'Outputs/file_base=k_stress_growth ' - 'UserObjects/cut_mesh2/stress_vectorpostprocessor=CrackFrontNonlocalStressVpp ' - 'UserObjects/cut_mesh2/stress_vector_name="crack_tip_stress" ' - 'UserObjects/cut_mesh2/stress_threshold=120' - exodiff = 'k_stress_growth.e-s003 k_stress_growth_XFEMCutMeshOutput.e-s0004' + input = 'edge_crack_2d_propagation.i kcrit_stress_based_meshCut_uo.i' + exodiff = 'kcrit_stress_based_meshCut_uo_xfemcutter_XFEMCutMeshOutput.e-s0004' abs_zero = 1e-8 map = false # XFEM requires --enable-unique-ids in libmesh unique_id = true - detail = ' and crack growth and direction is computed by a fracture integral or maximum stress criterion.' + detail = ' and crack growth and direction is computed by a fracture integral with constant fracture toughness or maximum stress criterion.' + [] + [k_error] + type = 'RunException' + input = 'edge_crack_2d_propagation.i kvpp_based_meshCut_uo.i' + cli_args = "UserObjects/cut_mesh2/k_critical=100" + expect_err = 'Fracture toughness cannot be specified by both k_critical and k_critical_vectorpostprocessor.' [] [stress_check] type = CSVDiff From dfffda7d14d19eb86119d1bdf6ad21172b3e76b9 Mon Sep 17 00:00:00 2001 From: Lynn Munday <62345302+lynnmunday@users.noreply.github.com> Date: Mon, 23 Dec 2024 12:53:13 -0700 Subject: [PATCH 12/17] Apply suggestions from code review Co-authored-by: Ben Spencer --- .../source/vectorpostprocessors/CrackFrontNonlocalStress.md | 2 +- .../vectorpostprocessors/CrackFrontNonlocalMaterialBase.h | 2 +- .../include/vectorpostprocessors/CrackFrontNonlocalStress.h | 2 +- .../vectorpostprocessors/CrackFrontNonlocalMaterialBase.C | 5 ++--- modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C | 2 +- .../tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i | 2 +- 6 files changed, 7 insertions(+), 8 deletions(-) diff --git a/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalStress.md b/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalStress.md index 67519780f161..fcfebf0c4e4c 100644 --- a/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalStress.md +++ b/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalStress.md @@ -13,7 +13,7 @@ where $\boldsymbol{n}$ is the normal direction vector and $\boldsymbol{\sigma}$ Data produced by this VectorPostprocessor is used in conjunction with the [InteractionIntegral.md] in the XFEM module by the `MeshCut2DFractureUserObject` to grow cracks. The `CrackFrontNonlocalStress` is useful for extending cracks that are approaching free surfaces because the interaction integrals computing `KI` and `KII` are affected when the integration domain intersects the free surface. `CrackFrontNonlocalStress` computes an average of the stress over a box-shaped domain at each crack tip point that is centered on the crack tip and extends [!param](/VectorPostprocessors/CrackFrontNonlocalStress/box_length) in front of the crack tip. The [!param](/VectorPostprocessors/CrackFrontNonlocalStress/box_height) is the dimension normal to the crack face, and [!param](/VectorPostprocessors/CrackFrontNonlocalStress/box_width) is the dimension tangential to the crack face. [!param](/VectorPostprocessors/CrackFrontNonlocalStress/box_width) is not used in 2D problems. Unlike the other stress integrals, like the [InteractionIntegral.md], that use the [CrackFrontDefinition.md], `CrackFrontNonlocalStress` is not set-up by the [/DomainIntegralAction.md]. -In the following input file example, the mesh consists of a 3D plate with a hole in the middle. The CrackFrontDefinition defines crack points around the center line of the hole, `boundary=1001`. The `CrackFrontNonlocalStress` integrates a generic stress field set-up in the input file over the box dimensions at each crack front point. +In the following input file example, the mesh consists of a 3D plate with a hole in the middle. The CrackFrontDefinition defines crack points around the center line of the hole, `boundary=1001`. The `CrackFrontNonlocalStress` averages a generic stress field over the box-shaped region at each crack front point, with dimensions defined in the input file. !listing crack_front_nonlocal_materials.i block=UserObjects VectorPostprocessors/CrackFrontNonlocalStress diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h index 8b246d0b595b..01e82230813c 100644 --- a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h @@ -14,7 +14,7 @@ // Forward Declarations class CrackFrontDefinition; /** - * Computes the average material property at points provided by the + * Computes the average material property in regions near points provided by the * crack_front_definition vectorpostprocessor. */ diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h index 0bb400c14c02..3a19bfa8ca55 100644 --- a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h @@ -13,7 +13,7 @@ #include "RankTwoTensor.h" /** - * Computes the average stress magnitude normal to the crack face at points provided by the + * Computes the average stress magnitude in the direction normal to the crack font at points provided by the * crack_front_definition vectorpostprocessor. */ diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C index 83d1d0fe8b9f..ae0d54b701b7 100644 --- a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C @@ -26,7 +26,6 @@ CrackFrontNonlocalMaterialBase::validParams() "multiple mechanics material systems on the same " "block, i.e. for multiple phases"); params.set("use_displaced_mesh") = false; - // EXEC_NONLINEAR to work with xfem_udpates params.set("execute_on") = {EXEC_TIMESTEP_BEGIN}; params.addClassDescription("Computes the average material property at a crack front."); return params; @@ -80,14 +79,14 @@ CrackFrontNonlocalMaterialBase::execute() // icfp crack front point index for (std::size_t icfp = 0; icfp < _avg_crack_tip_scalar.size(); icfp++) { - Point crack_face_normal = _crack_front_definition->getCrackFrontNormal(icfp); + Point crack_front_normal = _crack_front_definition->getCrackFrontNormal(icfp); for (unsigned int qp = 0; qp < _qrule->n_points(); qp++) { Real q = BoxWeightingFunction(icfp, _q_point[qp]); if (q == 0) continue; - Real scalar = getQPCrackFrontScalar(qp, crack_face_normal); + Real scalar = getQPCrackFrontScalar(qp, crack_front_normal); _avg_crack_tip_scalar[icfp] += _JxW[qp] * _coord[qp] * scalar * q; _volume[icfp] += _JxW[qp] * _coord[qp] * q; } diff --git a/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C b/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C index 0d1735d440ac..67dc19a7d262 100644 --- a/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C +++ b/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C @@ -132,7 +132,7 @@ MeshCut2DFractureUserObject::findActiveBoundaryGrowth() if (_k_critical_vpp && ((_k_critical_vpp->size() != _original_and_current_front_node_ids.size()))) mooseError( - "k_critical_vectorpostprocessor should have the same number of crack front points as " + "k_critical_vectorpostprocessor must have the same number of crack front points as " "CrackFrontDefinition.", "\n k_critical_vectorpostprocessor size = ", _k_critical_vpp->size(), diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i index 989ccfeb60b8..26bb56acbe1c 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i @@ -46,7 +46,7 @@ used_by_xfem_to_grow_crack = true [] -# MeshCut2DFractureUserObject are included in seperate input files +# MeshCut2DFractureUserObject are included in separate input files # [UserObjects] # [cut_mesh2] # type = MeshCut2DFractureUserObject From 78c7bb52aa110b8ca59c381855ade15e3b90c60b Mon Sep 17 00:00:00 2001 From: Lynn Munday Date: Mon, 23 Dec 2024 13:15:32 -0700 Subject: [PATCH 13/17] addressing user comments about name change --- .../CrackFrontNonlocalScalar.md | 19 ------------------- .../CrackFrontNonlocalScalarMaterial.md | 19 +++++++++++++++++++ ...r.h => CrackFrontNonlocalScalarMaterial.h} | 4 ++-- .../CrackFrontNonlocalStress.h | 2 +- ...r.C => CrackFrontNonlocalScalarMaterial.C} | 10 +++++----- .../crack_front_nonlocal_materials.i | 2 +- .../test/tests/crack_front_materials/tests | 2 +- .../kvpp_based_meshCut_uo.i | 2 +- 8 files changed, 30 insertions(+), 30 deletions(-) delete mode 100644 modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalar.md create mode 100644 modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.md rename modules/solid_mechanics/include/vectorpostprocessors/{CrackFrontNonlocalScalar.h => CrackFrontNonlocalScalarMaterial.h} (83%) rename modules/solid_mechanics/src/vectorpostprocessors/{CrackFrontNonlocalScalar.C => CrackFrontNonlocalScalarMaterial.C} (76%) diff --git a/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalar.md b/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalar.md deleted file mode 100644 index 86c7b2bbd5d3..000000000000 --- a/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalar.md +++ /dev/null @@ -1,19 +0,0 @@ -# CrackFrontNonlocalScalar - -!syntax description /VectorPostprocessors/CrackFrontNonlocalScalar - -## Description - -This object computes the average scalar material property at the crack front points defined by [CrackFrontDefinition.md]. The main use case for this `VectorPostprocessor` is to compute an average fracture toughness or $K_c$ at the crack front for use with the `MeshCut2DFractureUserObject` to grow cracks. This allows for spatially varying $K_c$ values defined by a `Material`. - -`CrackFrontNonlocalScalar` computes an average of the material property over a box-shaped domain at each crack tip point that is centered on the crack tip and extends [!param](/VectorPostprocessors/CrackFrontNonlocalScalar/box_length) in front of the crack tip. The [!param](/VectorPostprocessors/CrackFrontNonlocalScalar/box_height) is the dimension normal to the crack face, and [!param](/VectorPostprocessors/CrackFrontNonlocalScalar/box_width) is the dimension tangential to the crack face. [!param](/VectorPostprocessors/CrackFrontNonlocalScalar/box_width) is not used in 2D problems. - -In the following input file example, the mesh consists of a 3D plate with a hole in the middle. The CrackFrontDefinition defines crack points around the center line of the hole, `boundary=1001`. This `CrackFrontNonlocalScalar` averages a material property named `scalar_kcrit` over each 3D box at each crack front point. - -!listing crack_front_nonlocal_materials.i block=UserObjects VectorPostprocessors/CrackFrontNonlocalKcrit - -!syntax parameters /VectorPostprocessors/CrackFrontNonlocalScalar - -!syntax inputs /VectorPostprocessors/CrackFrontNonlocalScalar - -!syntax children /VectorPostprocessors/CrackFrontNonlocalScalar diff --git a/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.md b/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.md new file mode 100644 index 000000000000..cc295393a03c --- /dev/null +++ b/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.md @@ -0,0 +1,19 @@ +# CrackFrontNonlocalScalarMaterial' + +!syntax description /VectorPostprocessors/CrackFrontNonlocalScalarMaterial + +## Description + +This object computes the average scalar material property at the crack front points defined by [CrackFrontDefinition.md]. The main use case for this `VectorPostprocessor` is to compute an average fracture toughness or $K_c$ at the crack front for use with the `MeshCut2DFractureUserObject` to grow cracks. This allows for spatially varying $K_c$ values defined by a `Material`. + +`CrackFrontNonlocalScalarMaterial` computes an average of the material property over a box-shaped domain at each crack tip point that is centered on the crack tip and extends [!param](/VectorPostprocessors/CrackFrontNonlocalScalarMaterial/box_length) in front of the crack tip. The [!param](/VectorPostprocessors/CrackFrontNonlocalScalarMaterial/box_height) is the dimension normal to the crack face, and [!param](/VectorPostprocessors/CrackFrontNonlocalScalarMaterial/box_width) is the dimension tangential to the crack face. [!param](/VectorPostprocessors/CrackFrontNonlocalScalarMaterial/box_width) is not used in 2D problems. + +In the following input file example, the mesh consists of a 3D plate with a hole in the middle. The CrackFrontDefinition defines crack points around the center line of the hole, `boundary=1001`. This `CrackFrontNonlocalScalarMaterial` averages a material property named `scalar_kcrit` over each 3D box at each crack front point. + +!listing crack_front_nonlocal_materials.i block=UserObjects VectorPostprocessors/CrackFrontNonlocalKcrit + +!syntax parameters /VectorPostprocessors/CrackFrontNonlocalScalarMaterial + +!syntax inputs /VectorPostprocessors/CrackFrontNonlocalScalarMaterial + +!syntax children /VectorPostprocessors/CrackFrontNonlocalScalarMaterial diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalar.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.h similarity index 83% rename from modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalar.h rename to modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.h index bb7281a3d25b..2308256c850d 100644 --- a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalar.h +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.h @@ -15,12 +15,12 @@ * Computes the average material at points provided by the crack_front_definition * vectorpostprocessor. */ -class CrackFrontNonlocalScalar : public CrackFrontNonlocalMaterialBase +class CrackFrontNonlocalScalarMaterial : public CrackFrontNonlocalMaterialBase { public: static InputParameters validParams(); - CrackFrontNonlocalScalar(const InputParameters & parameters); + CrackFrontNonlocalScalarMaterial(const InputParameters & parameters); protected: /// The scalar material property diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h index 3a19bfa8ca55..9e6f6f96963f 100644 --- a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h @@ -13,7 +13,7 @@ #include "RankTwoTensor.h" /** - * Computes the average stress magnitude in the direction normal to the crack font at points provided by the + * Computes the average stress magnitude in the direction normal to the crack front at points provided by the * crack_front_definition vectorpostprocessor. */ diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalar.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.C similarity index 76% rename from modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalar.C rename to modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.C index e5d4a18c0c54..21630ee23680 100644 --- a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalar.C +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.C @@ -7,12 +7,12 @@ //* Licensed under LGPL 2.1, please see LICENSE for details //* https://www.gnu.org/licenses/lgpl-2.1.html -#include "CrackFrontNonlocalScalar.h" +#include "CrackFrontNonlocalScalarMaterial.h" -registerMooseObject("SolidMechanicsApp", CrackFrontNonlocalScalar); +registerMooseObject("SolidMechanicsApp", CrackFrontNonlocalScalarMaterial); InputParameters -CrackFrontNonlocalScalar::validParams() +CrackFrontNonlocalScalarMaterial::validParams() { InputParameters params = CrackFrontNonlocalMaterialBase::validParams(); params.addClassDescription("Computes the average material at points provided by the " @@ -20,14 +20,14 @@ CrackFrontNonlocalScalar::validParams() return params; } -CrackFrontNonlocalScalar::CrackFrontNonlocalScalar(const InputParameters & parameters) +CrackFrontNonlocalScalarMaterial::CrackFrontNonlocalScalarMaterial(const InputParameters & parameters) : CrackFrontNonlocalMaterialBase(parameters), _scalar(getMaterialProperty(_base_name + getParam("material_name"))) { } Real -CrackFrontNonlocalScalar::getQPCrackFrontScalar(const unsigned int qp, +CrackFrontNonlocalScalarMaterial::getQPCrackFrontScalar(const unsigned int qp, const Point /*crack_face_normal*/) const { return _scalar[qp]; diff --git a/modules/solid_mechanics/test/tests/crack_front_materials/crack_front_nonlocal_materials.i b/modules/solid_mechanics/test/tests/crack_front_materials/crack_front_nonlocal_materials.i index b1617b62618c..3945d9f004dc 100644 --- a/modules/solid_mechanics/test/tests/crack_front_materials/crack_front_nonlocal_materials.i +++ b/modules/solid_mechanics/test/tests/crack_front_materials/crack_front_nonlocal_materials.i @@ -53,7 +53,7 @@ box_height = 0.05 [] [CrackFrontNonlocalKcrit] - type = CrackFrontNonlocalScalar + type = CrackFrontNonlocalScalarMaterial material_name = kcrit base_name = scalar crack_front_definition = crack diff --git a/modules/solid_mechanics/test/tests/crack_front_materials/tests b/modules/solid_mechanics/test/tests/crack_front_materials/tests index 2a931b82e176..f7142ae07c70 100644 --- a/modules/solid_mechanics/test/tests/crack_front_materials/tests +++ b/modules/solid_mechanics/test/tests/crack_front_materials/tests @@ -1,5 +1,5 @@ [Tests] - design = 'CrackFrontNonlocalStress.md CrackFrontNonlocalScalar.md' + design = 'CrackFrontNonlocalStress.md CrackFrontNonlocalScalarMaterial.md' issues = '#27659 #29575' [crack_front_materials] type = 'CSVDiff' diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/kvpp_based_meshCut_uo.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/kvpp_based_meshCut_uo.i index 9a8fec990188..071c4f937c7a 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/kvpp_based_meshCut_uo.i +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/kvpp_based_meshCut_uo.i @@ -1,6 +1,6 @@ [VectorPostprocessors] [CrackFrontNonlocalScalarVpp] - type = CrackFrontNonlocalScalar + type = CrackFrontNonlocalScalarMaterial material_name = k_crit_mat crack_front_definition = crackFrontDefinition box_length = 0.05 From ad6bdcc900c745ff2e9abfeb2314cbd48b841802 Mon Sep 17 00:00:00 2001 From: Lynn Munday Date: Mon, 23 Dec 2024 14:28:39 -0700 Subject: [PATCH 14/17] Daniel helped me move the property name to the derived class. closes #29575 --- .../CrackFrontNonlocalMaterialBase.h | 5 ++++- .../vectorpostprocessors/CrackFrontNonlocalStress.h | 4 ++-- .../CrackFrontNonlocalMaterialBase.C | 10 +++++----- .../CrackFrontNonlocalScalarMaterial.C | 13 +++++++++---- .../vectorpostprocessors/CrackFrontNonlocalStress.C | 6 ++++-- .../crack_front_nonlocal_materials.i | 4 ++-- .../userobjects/MeshCut2DFractureUserObject.md | 2 +- .../src/userobjects/MeshCut2DFractureUserObject.C | 13 ++++++------- .../crack_front_stress_function_growth.i | 2 +- .../kcrit_stress_based_meshCut_uo.i | 2 +- .../mesh_cut_2D_fracture/kvpp_based_meshCut_uo.i | 2 +- .../mesh_cut_2D_fracture/stress_based_meshCut_uo.i | 2 +- modules/xfem/test/tests/mesh_cut_2D_fracture/tests | 1 + 13 files changed, 38 insertions(+), 28 deletions(-) diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h index 01e82230813c..eec9bc46bd21 100644 --- a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h @@ -23,7 +23,8 @@ class CrackFrontNonlocalMaterialBase : public ElementVectorPostprocessor public: static InputParameters validParams(); - CrackFrontNonlocalMaterialBase(const InputParameters & parameters); + CrackFrontNonlocalMaterialBase(const InputParameters & parameters, + const std::string & property_name); virtual void initialSetup() override; virtual void initialize() override; @@ -32,6 +33,8 @@ class CrackFrontNonlocalMaterialBase : public ElementVectorPostprocessor virtual void threadJoin(const UserObject & y) override; protected: + /// Material property name from derived class + const std::string _property_name; /** dimensions of the box in front of the crack tip that the stress is averaged over * The box is centered in front of the crack tip * _box_length distance box extends in front of the crack tip diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h index 9e6f6f96963f..fb59f73f7245 100644 --- a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h @@ -13,8 +13,8 @@ #include "RankTwoTensor.h" /** - * Computes the average stress magnitude in the direction normal to the crack front at points provided by the - * crack_front_definition vectorpostprocessor. + * Computes the average stress magnitude in the direction normal to the crack front at points + * provided by the crack_front_definition vectorpostprocessor. */ class CrackFrontNonlocalStress : public CrackFrontNonlocalMaterialBase diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C index ae0d54b701b7..c446c87c90e4 100644 --- a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C @@ -19,8 +19,6 @@ CrackFrontNonlocalMaterialBase::validParams() params.addRequiredParam("box_length", "Distance in front of crack front."); params.addRequiredParam("box_height", "Distance normal to front of crack front."); params.addParam("box_width", "Distance tangent to front of crack front."); - params.addRequiredParam("material_name", - "Get name of material property to compute at crack front"); params.addParam("base_name", "Optional parameter that allows the user to define " "multiple mechanics material systems on the same " @@ -31,8 +29,10 @@ CrackFrontNonlocalMaterialBase::validParams() return params; } -CrackFrontNonlocalMaterialBase::CrackFrontNonlocalMaterialBase(const InputParameters & parameters) +CrackFrontNonlocalMaterialBase::CrackFrontNonlocalMaterialBase(const InputParameters & parameters, + const std::string & property_name) : ElementVectorPostprocessor(parameters), + _property_name(property_name), _box_length(getParam("box_length")), _box_width(isParamValid("box_width") ? getParam("box_width") : 1), _box_height(getParam("box_height")), @@ -41,8 +41,8 @@ CrackFrontNonlocalMaterialBase::CrackFrontNonlocalMaterialBase(const InputParame _y(declareVector("y")), _z(declareVector("z")), _position(declareVector("id")), - _avg_crack_tip_scalar( - declareVector("crack_tip_" + _base_name + getParam("material_name"))) + // get the property name instead of materialname + _avg_crack_tip_scalar(declareVector("crack_tip_" + _base_name + _property_name)) { if (_mesh.dimension() == 3 && !isParamSetByUser("box_width")) paramError("box_width", "Must define box_width in 3D problems."); diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.C index 21630ee23680..28d1ee4262c9 100644 --- a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.C +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.C @@ -17,18 +17,23 @@ CrackFrontNonlocalScalarMaterial::validParams() InputParameters params = CrackFrontNonlocalMaterialBase::validParams(); params.addClassDescription("Computes the average material at points provided by the " "crack_front_definition vectorpostprocessor."); + params.addRequiredParam( + "property_name", "Get name of material property to compute at crack front"); + return params; } -CrackFrontNonlocalScalarMaterial::CrackFrontNonlocalScalarMaterial(const InputParameters & parameters) - : CrackFrontNonlocalMaterialBase(parameters), - _scalar(getMaterialProperty(_base_name + getParam("material_name"))) +CrackFrontNonlocalScalarMaterial::CrackFrontNonlocalScalarMaterial( + const InputParameters & parameters) + : CrackFrontNonlocalMaterialBase(parameters, + parameters.get("property_name")), + _scalar(getMaterialProperty(_base_name + _property_name)) { } Real CrackFrontNonlocalScalarMaterial::getQPCrackFrontScalar(const unsigned int qp, - const Point /*crack_face_normal*/) const + const Point /*crack_face_normal*/) const { return _scalar[qp]; } diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C index 1edde8cf8c7c..d2a4c50960f8 100644 --- a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalStress.C @@ -17,12 +17,14 @@ CrackFrontNonlocalStress::validParams() { InputParameters params = CrackFrontNonlocalMaterialBase::validParams(); params.addClassDescription("Computes the average stress normal to the crack face."); + params.addRequiredParam( + "stress_name", "Get name of stress tensor to compute at crack front"); return params; } CrackFrontNonlocalStress::CrackFrontNonlocalStress(const InputParameters & parameters) - : CrackFrontNonlocalMaterialBase(parameters), - _stress(getMaterialProperty(_base_name + getParam("material_name"))) + : CrackFrontNonlocalMaterialBase(parameters, parameters.get("stress_name")), + _stress(getMaterialProperty(_base_name + _property_name)) { } diff --git a/modules/solid_mechanics/test/tests/crack_front_materials/crack_front_nonlocal_materials.i b/modules/solid_mechanics/test/tests/crack_front_materials/crack_front_nonlocal_materials.i index 3945d9f004dc..d7ece269e26e 100644 --- a/modules/solid_mechanics/test/tests/crack_front_materials/crack_front_nonlocal_materials.i +++ b/modules/solid_mechanics/test/tests/crack_front_materials/crack_front_nonlocal_materials.i @@ -45,7 +45,7 @@ [VectorPostprocessors] [CrackFrontNonlocalStress] type = CrackFrontNonlocalStress - material_name = stress + stress_name = stress base_name = generic crack_front_definition = crack box_length = 0.1 @@ -54,7 +54,7 @@ [] [CrackFrontNonlocalKcrit] type = CrackFrontNonlocalScalarMaterial - material_name = kcrit + property_name = kcrit base_name = scalar crack_front_definition = crack box_length = 0.1 diff --git a/modules/xfem/doc/content/source/userobjects/MeshCut2DFractureUserObject.md b/modules/xfem/doc/content/source/userobjects/MeshCut2DFractureUserObject.md index 68abd14d33f5..ef6ba08330b3 100644 --- a/modules/xfem/doc/content/source/userobjects/MeshCut2DFractureUserObject.md +++ b/modules/xfem/doc/content/source/userobjects/MeshCut2DFractureUserObject.md @@ -12,7 +12,7 @@ The crack propagates if the failure criterion is met, given by: K_c \le \sqrt{K^2_I+K^2_{II}} \end{equation} -where $K_I$ and $K_{II}$ are the mode I and II stress intensity factors provided by the fracture integral and the material property $K_c$ is defined in the input file with a constant value for the entire domain using [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical) or from a [CrackFrontNonlocalScalar.md] VectorPostprocessor that samples a material property at each crack front point and is specified by [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical_vector_name). The crack growth direction is given by the direction that maximizes the crack-tip hoop stress, given by Equation 5 in [!cite](jiang2020). The growth increment is a user provided input given by [!param](/UserObjects/MeshCut2DFractureUserObject/growth_increment). The fracture integrals $K_I$ and $K_{II}$ are obtained from the [InteractionIntegral.md] vectorpostprocessor specified in the input file by [!param](/UserObjects/MeshCut2DFractureUserObject/ki_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/kii_vectorpostprocessor). Defaults for [!param](/UserObjects/MeshCut2DFractureUserObject/ki_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/kii_vectorpostprocessor) use the names produced by the [/DomainIntegralAction.md] which is the standard way to set-up the [InteractionIntegral.md]. +where $K_I$ and $K_{II}$ are the mode I and II stress intensity factors provided by the fracture integral and the material property $K_c$ is defined in the input file with a constant value for the entire domain using [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical) or from a [CrackFrontNonlocalScalarMaterial.md] VectorPostprocessor that samples a material property at each crack front point and is specified by [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/k_critical_vector_name). The crack growth direction is given by the direction that maximizes the crack-tip hoop stress, given by Equation 5 in [!cite](jiang2020). The growth increment is a user provided input given by [!param](/UserObjects/MeshCut2DFractureUserObject/growth_increment). The fracture integrals $K_I$ and $K_{II}$ are obtained from the [InteractionIntegral.md] vectorpostprocessor specified in the input file by [!param](/UserObjects/MeshCut2DFractureUserObject/ki_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/kii_vectorpostprocessor). Defaults for [!param](/UserObjects/MeshCut2DFractureUserObject/ki_vectorpostprocessor) and [!param](/UserObjects/MeshCut2DFractureUserObject/kii_vectorpostprocessor) use the names produced by the [/DomainIntegralAction.md] which is the standard way to set-up the [InteractionIntegral.md]. Near a free surface, the integration volumes of the rings used to compute the `InteractionIntegral` will intersect the surface, leading to a reduction in the fracture integral values. This can lead to cracks becoming unable to farther propagate as they approach free surfaces. For these cases, a maximum stress criterion computed using [CrackFrontNonlocalStress.md] vectorpostprocessor can be used for crack growth using an additional failure criterion given by: diff --git a/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C b/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C index 67dc19a7d262..4b00d5032e7e 100644 --- a/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C +++ b/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C @@ -131,13 +131,12 @@ MeshCut2DFractureUserObject::findActiveBoundaryGrowth() _original_and_current_front_node_ids.size()); if (_k_critical_vpp && ((_k_critical_vpp->size() != _original_and_current_front_node_ids.size()))) - mooseError( - "k_critical_vectorpostprocessor must have the same number of crack front points as " - "CrackFrontDefinition.", - "\n k_critical_vectorpostprocessor size = ", - _k_critical_vpp->size(), - "\n cracktips in MeshCut2DFractureUserObject = ", - _original_and_current_front_node_ids.size()); + mooseError("k_critical_vectorpostprocessor must have the same number of crack front points as " + "CrackFrontDefinition.", + "\n k_critical_vectorpostprocessor size = ", + _k_critical_vpp->size(), + "\n cracktips in MeshCut2DFractureUserObject = ", + _original_and_current_front_node_ids.size()); _active_front_node_growth_vectors.clear(); for (unsigned int i = 0; i < _original_and_current_front_node_ids.size(); ++i) diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/crack_front_stress_function_growth.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/crack_front_stress_function_growth.i index 1e1ea52e5938..b94f0c9b6536 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/crack_front_stress_function_growth.i +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/crack_front_stress_function_growth.i @@ -119,7 +119,7 @@ [CrackFrontNonlocalStress] type = CrackFrontNonlocalStress base_name = generic - material_name = stress + stress_name = stress crack_front_definition = crack_tip box_length = 0.1 box_height = 0.05 diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/kcrit_stress_based_meshCut_uo.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/kcrit_stress_based_meshCut_uo.i index 3f82716f810a..1282236b043e 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/kcrit_stress_based_meshCut_uo.i +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/kcrit_stress_based_meshCut_uo.i @@ -1,7 +1,7 @@ [VectorPostprocessors] [CrackFrontNonlocalStressVpp] type = CrackFrontNonlocalStress - material_name = stress + stress_name = stress crack_front_definition = crackFrontDefinition box_length = 0.05 box_height = 0.1 diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/kvpp_based_meshCut_uo.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/kvpp_based_meshCut_uo.i index 071c4f937c7a..a618552bd2fd 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/kvpp_based_meshCut_uo.i +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/kvpp_based_meshCut_uo.i @@ -1,7 +1,7 @@ [VectorPostprocessors] [CrackFrontNonlocalScalarVpp] type = CrackFrontNonlocalScalarMaterial - material_name = k_crit_mat + property_name = k_crit_mat crack_front_definition = crackFrontDefinition box_length = 0.05 box_height = 0.1 diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/stress_based_meshCut_uo.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/stress_based_meshCut_uo.i index d34f08c47a87..1c2e68ecc24e 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/stress_based_meshCut_uo.i +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/stress_based_meshCut_uo.i @@ -1,7 +1,7 @@ [VectorPostprocessors] [CrackFrontNonlocalStressVpp] type = CrackFrontNonlocalStress - material_name = stress + stress_name = stress crack_front_definition = crackFrontDefinition box_length = 0.05 box_height = 0.1 diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/tests b/modules/xfem/test/tests/mesh_cut_2D_fracture/tests index 3bfcdfd6361a..b9966cd44692 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/tests +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/tests @@ -49,6 +49,7 @@ input = 'edge_crack_2d_propagation.i kvpp_based_meshCut_uo.i' cli_args = "UserObjects/cut_mesh2/k_critical=100" expect_err = 'Fracture toughness cannot be specified by both k_critical and k_critical_vectorpostprocessor.' + detail = ' and produce an error when fracture toughness is specified by more than one input source.' [] [stress_check] type = CSVDiff From 4c479065a6dd391c8e6a9b82fdb5a2c6c3e65f53 Mon Sep 17 00:00:00 2001 From: Lynn Munday <62345302+lynnmunday@users.noreply.github.com> Date: Tue, 14 Jan 2025 12:07:55 -0700 Subject: [PATCH 15/17] Apply suggestions from code review Co-authored-by: Daniel Schwen --- .../CrackFrontNonlocalMaterialBase.h | 2 +- .../CrackFrontNonlocalScalarMaterial.h | 2 +- .../vectorpostprocessors/CrackFrontNonlocalStress.h | 1 - .../CrackFrontNonlocalMaterialBase.C | 9 +++------ 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h index eec9bc46bd21..2b4e3475c870 100644 --- a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalMaterialBase.h @@ -13,11 +13,11 @@ // Forward Declarations class CrackFrontDefinition; + /** * Computes the average material property in regions near points provided by the * crack_front_definition vectorpostprocessor. */ - class CrackFrontNonlocalMaterialBase : public ElementVectorPostprocessor { public: diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.h index 2308256c850d..ed5dec894820 100644 --- a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.h +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.h @@ -23,7 +23,7 @@ class CrackFrontNonlocalScalarMaterial : public CrackFrontNonlocalMaterialBase CrackFrontNonlocalScalarMaterial(const InputParameters & parameters); protected: - /// The scalar material property + /// Property that is averaged over the crack front points const MaterialProperty & _scalar; Real getQPCrackFrontScalar(const unsigned int qp, diff --git a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h index fb59f73f7245..3babffb7f40e 100644 --- a/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h +++ b/modules/solid_mechanics/include/vectorpostprocessors/CrackFrontNonlocalStress.h @@ -16,7 +16,6 @@ * Computes the average stress magnitude in the direction normal to the crack front at points * provided by the crack_front_definition vectorpostprocessor. */ - class CrackFrontNonlocalStress : public CrackFrontNonlocalMaterialBase { public: diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C index c446c87c90e4..1ced0b764ab6 100644 --- a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C @@ -77,7 +77,7 @@ void CrackFrontNonlocalMaterialBase::execute() { // icfp crack front point index - for (std::size_t icfp = 0; icfp < _avg_crack_tip_scalar.size(); icfp++) + for (const auto icfp: index_range(_avg_crack_tip_scalar)) { Point crack_front_normal = _crack_front_definition->getCrackFrontNormal(icfp); for (unsigned int qp = 0; qp < _qrule->n_points(); qp++) @@ -140,14 +140,11 @@ CrackFrontNonlocalMaterialBase::BoxWeightingFunction(std::size_t crack_front_poi RealVectorValue crack_node_to_current_node_rot = _crack_front_definition->rotateToCrackFrontCoords(crack_node_to_current_node, crack_front_point_index); - Real q = 0.0; if ((crack_node_to_current_node_rot(0) > 0) && (crack_node_to_current_node_rot(0) <= _box_length) && (std::abs(crack_node_to_current_node_rot(1)) <= _box_height / 2) && (std::abs(crack_node_to_current_node_rot(2)) <= _box_width / 2)) - { - q = 1.0; - } + return 1.0; - return q; + return 0.0; } From b9dfdc43e0b16696871b54c4683dd8d1c92ca091 Mon Sep 17 00:00:00 2001 From: Lynn Munday Date: Tue, 14 Jan 2025 13:43:40 -0700 Subject: [PATCH 16/17] addressing reviewer comments --- .../CrackFrontNonlocalMaterialBase.C | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C index 1ced0b764ab6..325fae16e1bb 100644 --- a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C @@ -18,7 +18,7 @@ CrackFrontNonlocalMaterialBase::validParams() "The CrackFrontDefinition user object name"); params.addRequiredParam("box_length", "Distance in front of crack front."); params.addRequiredParam("box_height", "Distance normal to front of crack front."); - params.addParam("box_width", "Distance tangent to front of crack front."); + params.addParam("box_width", 1.0, "Distance tangent to front of crack front."); params.addParam("base_name", "Optional parameter that allows the user to define " "multiple mechanics material systems on the same " @@ -34,7 +34,7 @@ CrackFrontNonlocalMaterialBase::CrackFrontNonlocalMaterialBase(const InputParame : ElementVectorPostprocessor(parameters), _property_name(property_name), _box_length(getParam("box_length")), - _box_width(isParamValid("box_width") ? getParam("box_width") : 1), + _box_width(getParam("box_width")), _box_height(getParam("box_height")), _base_name(isParamValid("base_name") ? getParam("base_name") + "_" : ""), _x(declareVector("x")), @@ -77,7 +77,7 @@ void CrackFrontNonlocalMaterialBase::execute() { // icfp crack front point index - for (const auto icfp: index_range(_avg_crack_tip_scalar)) + for (const auto icfp : index_range(_avg_crack_tip_scalar)) { Point crack_front_normal = _crack_front_definition->getCrackFrontNormal(icfp); for (unsigned int qp = 0; qp < _qrule->n_points(); qp++) @@ -98,8 +98,7 @@ CrackFrontNonlocalMaterialBase::finalize() { gatherSum(_avg_crack_tip_scalar); gatherSum(_volume); - - for (std::size_t icfp = 0; icfp < _avg_crack_tip_scalar.size(); ++icfp) + for (const auto icfp : index_range(_avg_crack_tip_scalar)) { if (_volume[icfp] != 0) _avg_crack_tip_scalar[icfp] = _avg_crack_tip_scalar[icfp] / _volume[icfp]; @@ -118,8 +117,7 @@ void CrackFrontNonlocalMaterialBase::threadJoin(const UserObject & y) { const auto & uo = static_cast(y); - - for (auto i = beginIndex(_avg_crack_tip_scalar); i < _avg_crack_tip_scalar.size(); ++i) + for (const auto i : index_range(_avg_crack_tip_scalar)) { _volume[i] += uo._volume[i]; _avg_crack_tip_scalar[i] += uo._avg_crack_tip_scalar[i]; From 7dcf1536d766ac6936a861bf7df1e41ee89c9d10 Mon Sep 17 00:00:00 2001 From: Lynn Munday <62345302+lynnmunday@users.noreply.github.com> Date: Wed, 15 Jan 2025 12:06:02 -0700 Subject: [PATCH 17/17] Apply suggestions from code review Co-authored-by: Ben Spencer --- .../CrackFrontNonlocalScalarMaterial.md | 4 ++-- .../CrackFrontNonlocalMaterialBase.C | 8 ++++---- .../src/userobjects/MeshCut2DFractureUserObject.C | 4 ++-- .../mesh_cut_2D_fracture/edge_crack_2d_propagation.i | 12 ------------ 4 files changed, 8 insertions(+), 20 deletions(-) diff --git a/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.md b/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.md index cc295393a03c..e33e3b77aa3f 100644 --- a/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.md +++ b/modules/solid_mechanics/doc/content/source/vectorpostprocessors/CrackFrontNonlocalScalarMaterial.md @@ -1,10 +1,10 @@ -# CrackFrontNonlocalScalarMaterial' +# CrackFrontNonlocalScalarMaterial !syntax description /VectorPostprocessors/CrackFrontNonlocalScalarMaterial ## Description -This object computes the average scalar material property at the crack front points defined by [CrackFrontDefinition.md]. The main use case for this `VectorPostprocessor` is to compute an average fracture toughness or $K_c$ at the crack front for use with the `MeshCut2DFractureUserObject` to grow cracks. This allows for spatially varying $K_c$ values defined by a `Material`. +This object computes the average of a scalar material property in the region of the crack front points defined by [CrackFrontDefinition.md]. The main use case for this `VectorPostprocessor` is to compute an average fracture toughness or $K_c$ at the crack front for use with the `MeshCut2DFractureUserObject` to grow cracks. This allows for spatially varying $K_c$ values defined by a `Material`. `CrackFrontNonlocalScalarMaterial` computes an average of the material property over a box-shaped domain at each crack tip point that is centered on the crack tip and extends [!param](/VectorPostprocessors/CrackFrontNonlocalScalarMaterial/box_length) in front of the crack tip. The [!param](/VectorPostprocessors/CrackFrontNonlocalScalarMaterial/box_height) is the dimension normal to the crack face, and [!param](/VectorPostprocessors/CrackFrontNonlocalScalarMaterial/box_width) is the dimension tangential to the crack face. [!param](/VectorPostprocessors/CrackFrontNonlocalScalarMaterial/box_width) is not used in 2D problems. diff --git a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C index 325fae16e1bb..cd0be40866a0 100644 --- a/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C +++ b/modules/solid_mechanics/src/vectorpostprocessors/CrackFrontNonlocalMaterialBase.C @@ -16,8 +16,10 @@ CrackFrontNonlocalMaterialBase::validParams() InputParameters params = ElementVectorPostprocessor::validParams(); params.addRequiredParam("crack_front_definition", "The CrackFrontDefinition user object name"); - params.addRequiredParam("box_length", "Distance in front of crack front."); - params.addRequiredParam("box_height", "Distance normal to front of crack front."); + params.addRequiredParam( + "box_length", "Dimension of property-averaging box in direction of crack extension."); + params.addRequiredParam( + "box_height", "Dimension of property-averaging box in direction normal to crack."); params.addParam("box_width", 1.0, "Distance tangent to front of crack front."); params.addParam("base_name", "Optional parameter that allows the user to define " @@ -53,8 +55,6 @@ CrackFrontNonlocalMaterialBase::CrackFrontNonlocalMaterialBase(const InputParame void CrackFrontNonlocalMaterialBase::initialSetup() { - // gather coupled user objects late to ensure they are constructed. Do not add them as - // dependencies (that's already done in the constructor). const auto uo_name = getParam("crack_front_definition"); _crack_front_definition = &(getUserObjectByName(uo_name, /*is_dependency = */ false)); diff --git a/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C b/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C index 4b00d5032e7e..1c563c0e36c0 100644 --- a/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C +++ b/modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C @@ -105,8 +105,8 @@ MeshCut2DFractureUserObject::initialize() void MeshCut2DFractureUserObject::findActiveBoundaryGrowth() { - // k_vpp's & stress_vpp are empty (but not a nullptr) on the very first time step because this UO - // is called before the InteractionIntegral or crackFrontStress vpp + // The k*_vpp & stress_vpp are empty (but not a nullptr) on the very first time step because this + // UO is called before the InteractionIntegral or crackFrontStress vpp if ((!_ki_vpp || _ki_vpp->size() == 0) && (!_stress_vpp || _stress_vpp->size() == 0)) return; diff --git a/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i b/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i index 26bb56acbe1c..c8f1e4fa58f7 100644 --- a/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i +++ b/modules/xfem/test/tests/mesh_cut_2D_fracture/edge_crack_2d_propagation.i @@ -46,18 +46,6 @@ used_by_xfem_to_grow_crack = true [] -# MeshCut2DFractureUserObject are included in separate input files -# [UserObjects] -# [cut_mesh2] -# type = MeshCut2DFractureUserObject -# mesh_file = make_edge_crack_in.e -# growth_increment = 0.05 -# ki_vectorpostprocessor = "II_KI_1" -# kii_vectorpostprocessor = "II_KII_1" -# k_critical = 100 -# [] -# [] - [Physics/SolidMechanics/QuasiStatic] [all] strain = SMALL