Skip to content

Commit

Permalink
Correct the angle theta for crack extension direction and check for m…
Browse files Browse the repository at this point in the history
…aximum sigma

refs idaholab#29921
  • Loading branch information
tranm-ansto committed Feb 24, 2025
1 parent 7763735 commit b4bf806
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 11 deletions.
31 changes: 27 additions & 4 deletions modules/xfem/src/userobjects/MeshCut2DFractureUserObject.C
Original file line number Diff line number Diff line change
Expand Up @@ -149,12 +149,35 @@ MeshCut2DFractureUserObject::findActiveBoundaryGrowth()
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
// growth direction in crack front coord (cfc) system based on the max hoop stress criterion
// Ref "Ceramic nuclear fuel fracture modeling with the extended finite element method" by
// W. Jiang, B. Spencer, and J. Dolbow
// Equation 6
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));
Real sqrt_k = std::sqrt(ki * ki + 8 * kii * kii);
theta_m = 2 * std::atan((ki - sqrt_k) / (4 * kii));
theta_p = 2 * std::atan((ki + sqrt_k) / (4 * kii));

// check sigma_tt
// Ref "Ceramic nuclear fuel fracture modeling with the extended finite element method" by
// W. Jiang, B. Spencer, and J. Dolbow
// Equation 5
const Real & r = _growth_increment;
Real sigma_tt_m = (ki / (4 * std::sqrt(2 * M_PI * r))) *
(3 * std::cos(theta_m / 2) + std::cos(3 * theta_m / 2)) +
(kii / (4 * std::sqrt(2 * M_PI * r))) *
(-3 * std::sin(theta_m / 2) - 3 * std::sin(3 * theta_m / 2));
Real sigma_tt_p = (ki / (4 * std::sqrt(2 * M_PI * r))) *
(3 * std::cos(theta_p / 2) + std::cos(3 * theta_p / 2)) +
(kii / (4 * std::sqrt(2 * M_PI * r))) *
(-3 * std::sin(theta_p / 2) - 3 * std::sin(3 * theta_p / 2));
Real theta;
if (sigma_tt_m > sigma_tt_p)
theta = theta_m;
else
theta = theta_p;

RealVectorValue dir_cfc;
dir_cfc(0) = std::cos(theta);
dir_cfc(1) = std::sin(theta);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
[Functions]
[pull_func]
type = ParsedFunction
expression = 0.00025*(1+t)
expression = 0.000307*(1+t)
[]
[]

Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
II_KI_1,id,x,y,z
179.96644885549,0,-1.7959413469933,0.60067940319072,0
109.79588615536,0,-0.08927463374154,0.56672807537366,0
117.47541725669,0,0.10286914470109,0.62758078178023,0
121.35976891745,0,1.9086197693201,0.59850479007701,0
162.95197012485,0,-2.3641336046242,0.56270032134112,0
161.30835857761,0,2.3644735531981,0.56381094263482,0
223.68734442443,0,-1.6630008798218,0.65061751080966,0
195.08900551755,0,-0.23539145914144,0.67909757143352,0
185.58601592247,0,0.24487407919304,0.69909531689729,0
158.69110493045,0,1.7711042455497,0.68594035263257,0
182.95885629805,0,-2.4358688580963,0.7050913486118,0
184.08215627613,0,2.4363905397662,0.70540653100326,0

0 comments on commit b4bf806

Please sign in to comment.