Source code for phasefieldx.Element.Phase_Field.geometric_crack
"""
Geometric Crack functions
=========================
"""
[docs]
def geometric_crack_function(phi, case='AT2'):
"""
Computes the geometric function alpha(phi) for various phase-field models.
Parameters
----------
phi : float or array_like
Phase-field variable.
case : str, optional
The phase-field model. Supported values are 'AT2', 'AT1', 'WU', 'DOUBLE'.
Default is 'AT2'.
Returns
-------
float or array_like
The value of the geometric function.
"""
if case == 'AT2':
return phi**2
elif case == 'AT1':
return phi
elif case == 'WU':
return 2.0 * phi - phi**2
elif case == 'DOUBLE':
return 16.0*phi**2 * (1 - phi)**2
else:
raise ValueError(f"Unknown case: {case}")
[docs]
def geometric_crack_function_derivative(phi, case='AT2'):
"""
Computes the derivative of the geometric function, alpha'(phi).
Parameters
----------
phi : float or array_like
Phase-field variable.
case : str, optional
The phase-field model. Supported values are 'AT2', 'AT1', 'WU', 'DOUBLE'.
Default is 'AT2'.
Returns
-------
float or array_like
The derivative of the geometric function.
"""
if case == 'AT2':
return 2 * phi
elif case == 'AT1':
return 1.0
elif case == 'WU':
return 2.0 - 2 * phi
elif case == 'DOUBLE':
return 32.0 * phi * (1 - phi) * (1 - 2 * phi)
else:
raise ValueError(f"Unknown case: {case}")
[docs]
def geometric_crack_coefficient(case='AT2'):
"""
Returns the geometric coefficient c_w for the crack surface density function.
This coefficient ensures that the integral of the dissipation function w(phi)
over the crack length equals 1.
Parameters
----------
case : str, optional
The phase-field model. Supported values are 'AT2', 'AT1', 'Wu', 'DOUBLE'.
Default is 'AT2'.
Returns
-------
float
The geometric coefficient.
"""
if case == 'AT2':
return 2.0
elif case == 'AT1':
return 8.0/3.0
elif case == 'WU':
return 3.141592653589793116
elif case == 'DOUBLE':
return 8.0/3.0
else:
raise ValueError(f"Unknown case: {case}")