Cohesive zone model of the multi-domain approach#
The area connection 'SB_TSL' of MultiDomain.get_kC_conn() connects
two skins over an area with a traction-separation law (TSL) at the interface,
such that the progressive delamination between them can be simulated. It
originates from the MSc thesis of D’Souza (2024) [nathan2024MSc],
Multi-Domain Semi-Analytical Cohesive Zone Approach. This page describes the
model as implemented and documents where the implementation departs from the
thesis. Equation numbers of the form “Eq. 5.12” refer to the thesis. Each
deviation states the problem, its consequence on the load-displacement curve
of the double cantilever beam (DCB), and what the implementation does now.
The implementation is found in:
the kernels
fkCSB11_dmg(),fkCSB12_dmg()andfkCSB22_dmg()ofpanels/multidomain/connections/kCSB_dmg.pyx, andcalc_kw_tsl();the methods of
MultiDomain:MultiDomain.get_kC_conn(),MultiDomain.calc_k_dmg(),MultiDomain.correct_separation(),MultiDomain.calc_kT_TSL(),MultiDomain.reaction_line_pd_xcte()andMultiDomain.force_out_plane_damage();the nonlinear driver
tests/multidomain/test_dcb_damage.pyand its counterpart for the validation notebooks,notebooks/dcb_utils.py.
The reference case is the DCB of Section 7.3 of the thesis: \(L = 65\) mm, \(b = 25\) mm, \(a_0 = 48\) mm, arms \([0]_{15}\) with ply thickness 0.14 mm of AS4D/PEKK-FC, \(G_{Ic} = 1.12\) N/mm, three domains per arm, of which the first one, with length \(a_1 = L - a_0 = 17\) mm, carries the cohesive zone.
Traction-separation law and damage#
The law implemented is bilinear, with one damage variable \(d\) that degrades the three components of the traction:
where \(k_o\) is the penalty stiffness of the pristine interface (key 'k_o'
of the connection) and \(\Delta_\alpha\) are the separations of
Eq. (5). The separation at damage onset is \(\Delta_o = \tau_o/k_o\)
and the separation at complete failure is \(\Delta_f = 2 G_{Ic}/\tau_o\), with
the keys 'tau_o' and 'G1c' of the connection. The damage is driven by
the normal separation after the correction described in
Correction of the separation field, \(\bar\Delta_w\), and it is irreversible:
where \(d^h\) is the damage of the last converged increment, stored in
MultiDomain.dmg_index by MultiDomain.update_TSL_history(). The
damage \(\hat d\) is computed by calc_kw_tsl() and the maximum with the
history, together with the degraded stiffness \(k_o (1 - d)\) at each
integration point, by MultiDomain.calc_k_dmg(). The area under the
softening branch of the law is \(G_{Ic}\).
Correction of the separation field#
Section 6.3.1 of the thesis describes the correction of the separation used
to compute the damage as: start at the point of maximum separation, location
\(A\), move in the direction of decreasing separation up to the first
non-positive separation, location \(B\), and set the separation to zero beyond
\(B\). The previous implementation set to zero, for each row \(y =\) cte,
everything from \(x = 0\) up to the last non-positive separation of the row.
When the approximation functions give a non-positive value between \(A\) and
the edge of the domain, for instance a small oscillation at \(x = a_1\), the
whole row was set to zero, including the fracture process zone.
MultiDomain.correct_separation() now implements the description of the
thesis, for a crack front that advances along \(-x\):
with \(i\) the row and \(j\) the column of the grid of integration points, \(j\) increasing with \(x\). Rows without non-positive values between \(x = 0\) and \(A_i\) are not modified, and neither are rows without any positive separation. The negative values of the separation are not only numerical: for a beam on an elastic foundation the separation behind the crack front oscillates with a decaying amplitude, and its first negative lobe does not change when the number of terms of the cohesive domain is increased from 10 to 20.
The corrected separation is used only to compute the damage. The tractions, the internal force vector and the stiffness matrices use the full separation.
Separations at the interface#
The compatibility of the area connection in the thesis, Eqs. 4.57–4.62, assumes \(w^i_{,x} = w^j_{,x}\) and \(w^i_{,y} = w^j_{,y}\) (Eq. 4.61) to write the in-plane compatibility with the slope of the top panel only, Eq. 4.62:
This holds for a perfect bond, but not inside the fracture process zone, where the two arms rotate in opposite directions. There, Eq. (4) gives a spurious tangential separation, penalised with the same \(k^w_{CZ}\), which stiffens the interface exactly where it should open. The implementation uses the displacement jump between the two surfaces in contact, with the slope of each panel:
where \(d^t\) and \(d^b\) are the distances from the mid-planes of the top and
bottom panels to the interface, \(u^t, v^t, w^t\) and \(u^b, v^b, w^b\) their
mid-plane displacements. Top and bottom refer to the \(z\) axis, normal to the
mid-surfaces and common to both panels, pointing up in the DCB: the top panel
is the panel on the positive side of the interface along \(z\), whose face \(z =
-d^t\) is at the interface, and it is p1 of the connection dictionary; the
bottom panel is the one on the negative side, whose face \(z = +d^b\) is at the
interface, and it is p2, whatever their order in the assembly, see
MultiDomain.get_kC_conn(). With
these three separations and the degraded stiffness \(k^w_{CZ} = k_o (1 - d)\),
the penalty energy of Eq. 5.1 becomes:
and the stiffness matrix of the connection is:
where \([B_\Delta]\) is the operator that gives the three separations of
Eq. (5) from the Ritz constants \(\{c\}\). For a frozen damage field,
the internal force of the connection is \([K^{conn}_{dmg}]\{c\}\), see
Eq. (8). The integral is evaluated
with a Gauss-Legendre rule of nr_x_gauss \(\times\) nr_y_gauss points
over the domain of the top panel, and \(k^w_{CZ}\) is given at each of these
points. The terms of the kernels that are new or modified with respect to the
thesis are listed in the docstrings of fkCSB11_dmg(),
fkCSB12_dmg() and fkCSB22_dmg(). The kernel of the undamaged
connection 'SB', kCSB.pyx, keeps Eq. (4), which is
adequate for a perfect bond.
The same kernel had the approximation functions in \(\eta\) of the top panel in the coupling block built with the flags of the edge \(y_1\) in place of \(y_2\). This had no effect on the DCB, where all \(y\) flags are 1.
Energy dissipated by crack formation#
The thesis adds the term \(U_{crack}\) of Eq. 5.18 to the total potential energy, Eq. 5.29, with the force vector \(\{f_{crack}\}\) of Eq. 5.28 and the stiffness matrix \([K_{crack}]\) of Eq. 5.26. This counts the dissipated energy twice. The degradation of the penalty stiffness \(k^w_{CZ} = k_o(1-d)\) inside \([K^{conn}_{dmg}]\), Eq. 5.5, already makes the traction follow the softening branch of the traction-separation law, and the area under that branch is \(G_{Ic}\), exactly as in a finite element with a cohesive law. The implementation has neither \(U_{crack}\), \(\{f_{crack}\}\) nor \([K_{crack}]\), and the residual is:
where \(d\) is the damage at each integration point, Eq. (2), the largest value between the converged history and the value obtained from the current separation, and \([K^{pen}_{PD}]\) is the penalty stiffness of the prescribed displacement. The sudden increase of the slope at damage onset reported in Section 7.1.4 of the thesis, and the need to drop \([K^2_{crack}]\), are consequences of the double counting.
Consistent tangent stiffness#
Writing the separations as \(\Delta_\alpha = [B_\alpha]\{c\}\), the internal force vector of the connection and its derivative are:
with:
The thesis does not derive the tangent of the cohesive zone. With the secant stiffness \([K^{conn}_{dmg}]\) alone, the iteration matrix misses the change of the damage with the displacements. It overestimates the stiffness of every softening point, and the Newton-Raphson iterations converge linearly, slowly, once the crack grows: in the reference DCB, the first increment after the first fully damaged point needed more than 130 iterations.
The mask \(\chi\) selects the points where the damage grows in the current state. Where it is 1, the correction of Correction of the separation field leaves the separation unchanged, \(\bar\Delta_w = \Delta_w\) and \(\partial \bar\Delta_w / \partial \{c\} = [B_w]\). The derivative of the correction itself, a switch between 0 and \(\Delta_w\), is zero almost everywhere. Some properties of Eq. (10):
\([K^{conn}_{\dot d}]\) is not symmetric, because the tangential tractions depend on \(\Delta_w\) through \(d\), while \(d\) does not depend on \(\Delta_u\), \(\Delta_v\). The term \([B_w]^\top \Delta_w [B_w]\) is symmetric and negative semi-definite; it makes the normal tangent stiffness of a softening point \(k_o (1 - d - \hat d' \Delta_w) = -k_o \Delta_o / (\Delta_f - \Delta_o)\), the slope of the descending branch of the bilinear law.
The iteration matrix becomes \([K_C] + [K_G] + [K^{conn}_{dmg}] + [K^{conn}_{\dot d}] + [K^{pen}_{PD}]\). Under displacement control the prescribed-displacement penalty keeps it regular on the softening branch of the DCB.
structsolve.solveusesscipy.sparse.linalg.spsolve, which accepts non-symmetric matrices.Like \([K^{conn}_{dmg}]\), \([K^{conn}_{\dot d}]\) is evaluated at every iteration, while \([K_C] + [K_G]\) is refreshed every \(n_{NR}\) iterations, see Solution procedure.
MultiDomain.calc_kT_TSL() evaluates \([K^{conn}_{\dot d}]\) at the
Gauss-Legendre points of the connection, with \([B_\alpha]\) built once per
panel from the field functions and cached. The drivers use it by default
(consistent_tangent=True in test_dcb_damage.py, always in
dcb_utils.solve_dcb).
Assembly of the cohesive stiffness by matrix products#
The thesis assembles \([K^{conn}_{dmg}]\) with loops over the terms of both
panels and over the integration points, where the approximation functions are
evaluated inside the loops, kCSB_dmg.pyx. Because \([K^{conn}_{dmg}]\) is
part of the internal force vector, it is needed at every iteration (see
Solution procedure), and with \(60 \times 30\) integration points and \(10 \times 10\), \(8 \times 8\) terms these
loops took about 11 s per assembly, 77% of the run time in the elastic range.
The implementation now writes the same Gauss-Legendre rule as matrix products.
Let \(g = 1, \dots, n_g\) be the integration points, with weights \(w_g = w_{\xi}
w_{\eta} \, ab/4\), and \(\{c_{tb}\}\) the Ritz constants of the top panel
followed by those of the bottom panel. The operators of Eq. (5)
evaluated at all points are the \(n_g \times n_{dof}\) matrices:
where row \(g\) of \([N^t_u]\) holds the approximation functions of \(u\) of the
top panel at point \(g\), and so on. The panel functions are the ones of the
field evaluation, fuvw, obtained by evaluating the field for each unit
vector of Ritz constants. With \(\text{diag}(\cdot)\) the diagonal matrix of a
vector over the points, the secant stiffness is:
a product that runs on optimised BLAS routines. The integration rule is the same as in the loops, so the result is the same up to round-off. The operators depend only on the geometry and on the approximation functions, and they are computed once and cached. The consistent tangent of Eq. (10) uses the same operators, restricted to the rows where \(\chi = 1\). Only the upper triangle of Eq. (13) is added to the connection matrix, which is made symmetric afterwards together with the other connections.
Update restricted to the damaged points. Splitting \(k_g = k_o - (k_o - k_g)\) in Eq. (13):
where \(\mathcal{D} = \{ g : k_g \neq k_o \}\) is the set of damaged points and the subscript \(\mathcal{D}\) keeps only their rows. \([K^{conn}_{o}]\), the stiffness of the pristine interface, is computed once for each \(k_o\) and cached. Before damage onset \(\mathcal{D}\) is empty and the assembly reduces to a copy of \([K^{conn}_{o}]\). After onset, \(\mathcal{D}\) holds the fracture process zone and the cracked region, and the cost of the correction grows with the number of their points, not with the size of the whole interface. The correction is exact, not an approximation: it is Eq. (13) regrouped. Because \(k_g\) is taken from the stiffness field used by the kernels, the approach does not depend on how the damage is computed.
The loops of kCSB_dmg.pyx are used only when the connection has
use_kernels=True. Both assemblies integrate over the domain of the top
panel and evaluate the functions of the bottom panel at the natural
coordinates of the top panel, therefore the two panels must have the same
dimensions \(a\), \(b\), which MultiDomain checks for the connections
'SB' and 'SB_TSL', raising a ValueError otherwise. In the elastic
range of the DCB, the matrix products and
the update of Eq. (14), together with the changes of the driver
described in Solution procedure, reduce the time of eight
displacement increments from 341 s to 29 s, with the same loads to a relative
\(1.3 \times 10^{-8}\), the order of the convergence tolerance.
Load measured at the loaded edge#
The thesis evaluates the load with two approaches, Section 5.4, and scales the second one, the area integral of the traction, Eq. 5.38, with the ratio between both at the first increment, Section 7.1.4. The area integral was computed with the corrected separation of Section 6.3.1, in which the separation behind the crack front is set to zero. This removes the compressive tractions that balance the tensile ones. For a beam on an elastic foundation the separation behind the peak is physically negative, and its integral is not small. The table below compares, for a linear elastic solution with a tip displacement of 1 mm, the reaction at the loaded edge with the integrals of the traction computed with the full separation \(\Delta\) and with the corrected separation \(\Delta^{corr}\).
\(k_o\) [N/mm³] |
Reaction [N] |
\(\int k \Delta \, dA\) [N] |
\(\int k \Delta^{corr} \, dA\) [N] |
\(\int Q_x \, dy\) [N] |
|---|---|---|---|---|
\(1\times10^4\) |
25.30 |
25.31 |
353.0 |
24.73 |
\(5\times10^4\) |
26.18 |
26.18 |
523.9 |
25.59 |
\(2\times10^5\) |
26.69 |
26.70 |
741.2 |
26.09 |
The ratio between the corrected integral and the reaction depends on \(k_o\) and on the damage state, such that a scaling factor fixed at the first increment distorts the curve after damage onset. The line integral of \(Q_x\) with finite differences of \(M_{xx}\) is 2% low. The implementation now provides:
MultiDomain.reaction_line_pd_xcte(), the reaction of the prescribed displacement \(w_p(y)\) imposed with the penalty \(k_w\) along \(x = x_p\):(15)#\[R = \int_0^b k_w \left( w_p(y) - w(x_p, y) \right) dy\]This is what the load cell measures, and it is used for the load-displacement curves.
MultiDomain.force_out_plane_damage()integrates \(\tau = k^w_{CZ} \Delta\) with the full separation \(\Delta\), the same that enters Eq. (8). It matches \(R\) by equilibrium of the loaded arm and needs no scaling. The corrected separation is used only to compute the damage.
Penalty stiffness of the edge connections#
The default penalties of calc_kt_kr() for an 'SSxcte' connection
between two equal laminates are \(k_t = A_{11}/h\) and \(k_r = D_{11}/h\), from
Castro and Donadon (2017) [castro2017Multidomain]. With the penalty energy
\(k_r (w^i_{,x} - w^j_{,x})^2\) the connection behaves as a rotational spring
of stiffness \(2 k_r\) per unit width, which adds to a cantilever loaded at the
tip a compliance equal to \(3h/(2a)\) of its bending compliance, about 7% for
each connection of the DCB arm (\(h = 2.1\) mm, \(a = 48\) mm). The arms of the
reference model have two connections each, at the crack tip moment. The
table below gives the elastic stiffness of the DCB, \(k_o = 2\times10^5\)
N/mm³, when the default \(k_t\) and \(k_r\) are multiplied by a factor.
Factor |
\(P/\delta\) [N/mm] |
\(\Delta_{max}/\delta\) |
|---|---|---|
1 |
26.69 |
\(4.22\times10^{-4}\) |
10 |
32.54 |
\(5.21\times10^{-4}\) |
100 |
33.27 |
\(5.35\times10^{-4}\) |
1000 |
33.35 |
\(5.36\times10^{-4}\) |
The converged value agrees with a beam on an elastic foundation, \(P/\delta
\approx 33\) N/mm. With the default penalties the separation at the crack tip,
and therefore the damage onset, lag the imposed displacement by 20%. This is
independent of the 0.015 mm domain used between the cohesive domain and the
free arm: replacing it by a 5 mm domain gives 27.23 N/mm with the default
penalties and 33.28 N/mm with the factor 100. The drivers multiply the
default 'SSxcte' penalties by edge_penalty_factor, 100 by default. The
library defaults are unchanged.
Solution procedure#
The drivers, tests/multidomain/test_dcb_damage.py and
notebooks/dcb_utils.py, solve Eq. (8) under displacement
control with the modified Newton-Raphson method of Section 5.3 of the thesis.
The changes described below modify the iterations but, except for the
convergence criterion, not the equations being solved.
Secant stiffness of the cohesive zone at every iteration. The driver of the thesis refreshed \([K^{conn}_{dmg}]\) only every \(n_{NR} = 3\) iterations, together with the tangent stiffness matrix. However, \([K^{conn}_{dmg}]\) is the secant stiffness of the cohesive zone and it is part of the internal force vector, Eq. (8). Keeping it frozen makes the residual inconsistent with the traction-separation law, and a converged state may carry a damage field computed with the displacements of earlier iterations. The drivers now evaluate \([K^{conn}_{dmg}]\) at every iteration, and only the tangent stiffness of the panels, \([K_C] + [K_G]\), is refreshed every \(n_{NR}\) iterations. The iteration matrix of Section 5.3 of the thesis is \([K_C] + [K_G] + [K^{conn}_{dmg}] + [K^{pen}_{PD}]\), where the secant stiffness of the cohesive zone replaces its tangent; the drivers add the damage-rate term \([K^{conn}_{\dot d}]\) of Eq. (10).
Predictor. Each increment started from the last converged state. Under displacement control the first residual is then dominated by the jump of the prescribed displacement, and the first iteration always ended with a ratio of Eq. (17) close to 1. The increment \(n\) now starts from the linear extrapolation of the last two converged states:
with the state \(w_p = 0\), \(\{c\} = 0\) used for the second increment
(predictor=True). The damage history is only updated after convergence,
so the damage of the predicted state is not stored.
Reuse of \([K_C] + [K_G]\) in the elastic range. While no point of the
interface is damaged, the tangent stiffness of the panels is reused for up to
kT_pan_reuse_steps increments, 5 by default, and within an increment it
is refreshed every \(n_{NR}\) iterations, but not after the first one. The
residual is always evaluated exactly, so the converged solution does not
change; only the number of iterations can increase. After onset, \([K_C] +
[K_G]\) is evaluated at the start of every increment.
Why Newton-Raphson fails after the peak. The residual is continuous but only piecewise smooth. Its derivative jumps whenever an integration point crosses \(\Delta_o\) (from \(k_o\) to the negative softening slope \(-k_o \Delta_o/(\Delta_f - \Delta_o)\)), crosses \(\Delta_f\) (from the softening slope to zero), switches between loading (\(\chi = 1\)) and unloading (\(\hat d \le d^h\)), or changes sign and enters or leaves the region zeroed by the correction of Eq. (3). The consistent tangent of Eq. (10) is exact only on one side of each kink. Before the peak, few points cross a kink in one iteration and the quadratic convergence is not affected. After the peak, the Ritz functions are global, so a Newton correction moves the whole crack front at once. In the DCB with \(k_o = 5 \times 10^4\) N/mm³ and \(\tau_o = 87\) MPa, at \(w_p = 6.8\) mm, every correction changed \(\{c\}\) by 3–20%, the normal separation of points at the crack front swung between \(-0.0018\) and \(+0.0039\) mm, about \(3 \Delta_o\), and 14–110 points switched between loading and unloading at every iteration. The iterations entered an exact cycle of period 6, with the ratio of Eq. (17) repeating 0.998, 0.999, 0.994, 0.995, 0.988, 0.687, which no number of iterations can break. Two safeguards are added to the drivers. Neither changes the equations or the convergence criterion, so a converged state is the same solution as before, only the path to it changes.
Backtracking line search. With \(\{\delta c\}\) the solution of \([K]\{\delta c\} = -\{R(\{c_i\})\}\), where \([K]\) is the iteration matrix, the new iterate is \(\{c_{i+1}\} = \{c_i\} + s\{\delta c\}\), with the step length \(s\) taken as the first of \(s = 1, \frac{1}{2}, \frac{1}{4}, \dots, 2^{-n_{ls}}\) that satisfies:
where \([D]\) holds the absolute values of the diagonal of \([K]\) at the start of the increment, the scaling of the criterion of Eq. (17), which balances the rows of the prescribed-displacement penalty against the others. The merit function is the residual norm and not an energy, because the damaged interface has no potential and \([K]\) is not symmetric. When \([K]\) is the exact Jacobian \([J]\) of the residual, \(\{\delta c\}\) is a descent direction of this merit function for any positive weighting:
so a small enough \(s\) always satisfies Eq. (16). Between refreshes
of \([K_C] + [K_G]\) the iteration matrix is not the exact Jacobian and this is
not guaranteed; if no trial satisfies Eq. (16), the trial with the
smallest norm is taken, a trial whose residual is not finite counting as an
infinite norm. Halving \(s\) halves the jump of the separations and
thus reduces the number of kinks crossed per iteration. Each trial costs one
evaluation of the residual, which is cheap with the assembly by matrix
products; the trial \(s = 1\) is the residual that the iteration needs anyway.
The drivers use \(n_{ls} = 6\) (line_search_max).
Bisection of increments. If an increment from \(w_{p,n-1}\) to \(w_{p,n}\)
does not converge within \(n_{max} = 50\) iterations (max_NR_iter), or
diverges, that is, the ratio of Eq. (17) is not finite or
exceeds \(10^3\) after any iteration, its iterates are discarded and the first
half, from \(w_{p,n-1}\) to
\((w_{p,n-1} + w_{p,n})/2\), is solved from the last converged state. This is
applied recursively with a stack of pending targets: when a sub-increment
converges, the driver tries again to reach the next pending target, and when
it fails, the remaining interval is halved again, down to \(2^{-6}\) of the
original increment (max_bisections), after which the analysis is aborted.
Discarding the iterates is consistent because the damage history \(d^h\) is
only updated with converged states. Every converged sub-increment updates
\(d^h\) and the states used by the predictor, so a bisected increment follows a
finer loading path, which matters for an irreversible law; the results are
stored only at the prescribed displacements of the original list. The list of
prescribed displacements itself does not change: sub-increments are only
created when an increment fails.
Convergence criterion. The prescribed displacement is imposed with \(k_w = 10^6\), such that \(\{f_{ext}\}\) and \([K^{pen}_{PD}]\{c\}\) are of the order of \(10^6\)–\(10^7\), while the physical forces are of the order of \(10^2\) N. The denominator of Eq. 5.35 of the thesis, \(\max(F(\{f_{ext}\}), F(\{f_{int}\}))\), is dominated by the penalty terms, and the tolerance \(10^{-4}\) is then not a relative tolerance on the physical forces. The drivers use:
where \(F(\cdot) = \|\cdot\|_D\) and the second term of the denominator is the
reaction of the prescribed displacement. The large \(k_w\) also degrades the
accuracy of the first solution of each increment, whose ratio of
Eq. (17) can be close to 1. An increment is therefore declared
divergent only when the ratio is not finite or exceeds \(10^3\), instead of
when it reaches 1. A divergent increment does not abort the analysis: it is
bisected as described above, and the analysis is aborted only when a
sub-increment of \(2^{-6}\) of the original increment (max_bisections)
still does not converge.
Verification#
The implementation is verified by the tests of
tests/multidomain/test_sb_tsl.py:
The kernels
fkCSB11_dmg(),fkCSB12_dmg()andfkCSB22_dmg()were verified by comparing \(\{c\}^\top [K] \{c\}\) with twice the Gauss-Legendre integral of the penalty energy of Eq. (6), evaluated from the displacement field, for random \(\{c\}\), random boundary flags, panels with different numbers of terms and thicknesses, and a random \(k^w_{CZ}\) field: the relative difference is below \(10^{-15}\).The assembly by matrix products and the loops of
kCSB_dmg.pyxagree to a relative \(10^{-12}\) for random boundary flags, both orders of the panels in the assembly and a damage field with pristine, softening and failed points.MultiDomain.calc_kT_TSL()was verified against central finite differences of \([K^{conn}_{dmg}(\{c\})]\{c\}\), for random states in the softening range, with and without points where \(d^h > \hat d\): the relative error of \([K^{conn}_{dmg}] + [K^{conn}_{\dot d}]\) is below \(2 \times 10^{-9}\), against 9–62% for \([K^{conn}_{dmg}]\) alone.A
'SB_TSL'connection between panels of different dimensions raises aValueError, with the matrix products and with the kernels.
In the nonlinear analyses, the area integral of the traction,
MultiDomain.force_out_plane_damage(), must match the reaction of the
prescribed displacement, MultiDomain.reaction_line_pd_xcte(), which
the drivers report at every increment.
Convergence study#
The discretisation of the cohesive domain was studied on the reference DCB (length 65 mm, width 25 mm, precrack 48 mm, arms of 15 plies of 0.14 mm, \(E_1 = 133.15\) GPa, \(E_2 = 10.95\) GPa, \(\nu_{12} = 0.316\), \(G_{12} = 5.19\) GPa, \(G_{Ic} = 1.12\) N/mm), with the driver described in Solution procedure and two sets of cohesive parameters:
case A: \(k_o = 5 \times 10^4\) N/mm³, \(\tau_o = 87\) MPa;
case B: \(k_o = 2 \times 10^5\) N/mm³, \(\tau_o = 74.2\) MPa.
The cohesive domain is 17 mm long, the free arms are modelled with \(8 \times 8\) terms, and the prescribed displacement goes up to \(w_p = 8\) mm in 38 increments, of 0.2 mm after \(w_p = 5\) mm. The parameters varied are the number of terms along \(x\) of the cohesive domain, \(m_{tsl}\), and the number of Gauss-Legendre points along \(x\) of the connection, \(n_x\), in a full grid \(m_{tsl} \in \{10, 15, 20, 25\} \times n_x \in \{60, 120, 180\}\). Separately, from the reference \(m_{tsl} = 15\), \(n_x = 120\), the study varied the number of terms along \(y\) of the cohesive domain (\(n_{tsl} = 10 \to 15\)), the number of Gauss points along \(y\) (\(n_y = 30 \to 60\)), the number of terms of the other domains (\(m = n = 8 \to 12\)) and the increment of \(w_p\) after 5 mm (halved). The metrics are:
the peak load \(P_{max}\) and the prescribed displacement at the peak, \(w_p(P_{max})\);
the loads at \(w_p = 6\), 7 and 8 mm, after the peak;
the coefficient of variation of the load drop per increment after the peak, \(CV = \mathrm{std}(\Delta P)/|\mathrm{mean}(\Delta P)|\), which is small for a smooth softening and large when the crack front advances in jumps and the curve has plateaus;
the number of increments that did not converge and were bisected, and the total number of Newton-Raphson iterations;
the wall time. The runs shared 16 cores, 8 to 11 at a time, so the wall times only indicate the relative cost.
The study is reproduced by notebooks/convergence_study.py, and the metrics
and load curves of all runs are stored in
notebooks/results/convergence_study.json.
case |
\(m_{tsl}\) |
\(n_x\) |
\(P_{max}\) |
\(w_p(P_{max})\) |
\(P(6)\) |
\(P(7)\) |
\(P(8)\) |
\(CV\) |
bisections |
iterations |
time |
|---|---|---|---|---|---|---|---|---|---|---|---|
A |
10 |
60 |
166.96 |
5.80 |
161.97 |
150.68 |
141.10 |
0.81 |
5 |
394 |
32 |
A |
10 |
120 |
167.16 |
5.80 |
161.95 |
150.76 |
141.20 |
0.73 |
0 |
134 |
9 |
A |
10 |
180 |
167.08 |
5.80 |
162.00 |
150.76 |
141.19 |
0.73 |
0 |
135 |
9 |
A |
15 |
60 |
165.92 |
5.60 |
162.53 |
150.52 |
140.70 |
0.32 |
4 |
375 |
56 |
A |
15 |
120 |
165.96 |
5.60 |
162.70 |
150.61 |
140.70 |
0.27 |
0 |
137 |
26 |
A |
15 |
180 |
165.96 |
5.60 |
162.74 |
150.61 |
140.60 |
0.26 |
0 |
138 |
27 |
A |
20 |
60 |
165.91 |
5.60 |
162.45 |
150.49 |
140.69 |
0.32 |
2 |
266 |
91 |
A |
20 |
120 |
165.95 |
5.60 |
162.64 |
150.58 |
140.69 |
0.26 |
0 |
139 |
59 |
A |
20 |
180 |
165.95 |
5.60 |
162.68 |
150.57 |
140.61 |
0.26 |
0 |
140 |
59 |
A |
25 |
60 |
165.91 |
5.60 |
162.44 |
150.49 |
140.69 |
0.32 |
1 |
203 |
158 |
A |
25 |
120 |
165.95 |
5.60 |
162.63 |
150.58 |
140.70 |
0.26 |
0 |
137 |
117 |
A |
25 |
180 |
165.95 |
5.60 |
162.67 |
150.58 |
140.62 |
0.26 |
0 |
136 |
118 |
B |
10 |
60 |
168.12 |
5.80 |
161.41 |
150.10 |
– |
1.04 |
6 |
469 |
43 |
B |
10 |
120 |
168.17 |
5.80 |
161.19 |
150.41 |
141.41 |
1.08 |
0 |
137 |
9 |
B |
10 |
180 |
168.16 |
5.80 |
161.30 |
150.37 |
141.44 |
1.07 |
0 |
138 |
9 |
B |
15 |
60 |
165.33 |
5.80 |
163.15 |
150.49 |
140.40 |
0.27 |
7 |
542 |
85 |
B |
15 |
120 |
165.36 |
5.80 |
162.76 |
150.42 |
140.75 |
0.16 |
0 |
132 |
27 |
B |
15 |
180 |
165.34 |
5.80 |
162.70 |
150.43 |
140.70 |
0.16 |
0 |
137 |
26 |
B |
20 |
60 |
165.21 |
5.80 |
163.08 |
150.59 |
– |
0.19 |
10 |
727 |
253 |
B |
20 |
120 |
165.24 |
5.80 |
162.71 |
150.57 |
140.86 |
0.13 |
0 |
135 |
57 |
B |
20 |
180 |
165.22 |
5.80 |
162.65 |
150.59 |
140.77 |
0.13 |
0 |
134 |
56 |
B |
25 |
60 |
165.21 |
5.80 |
163.05 |
150.56 |
– |
0.18 |
2 |
274 |
– |
B |
25 |
120 |
165.25 |
5.80 |
162.69 |
150.56 |
140.86 |
0.13 |
0 |
133 |
107 |
B |
25 |
180 |
165.22 |
5.80 |
162.64 |
150.58 |
140.78 |
0.12 |
0 |
134 |
104 |
case |
variation |
\(P_{max}\) |
\(w_p(P_{max})\) |
\(P(6)\) |
\(P(7)\) |
\(P(8)\) |
\(CV\) |
bisections |
iterations |
time |
|---|---|---|---|---|---|---|---|---|---|---|
A |
reference |
165.96 |
5.60 |
162.70 |
150.61 |
140.70 |
0.27 |
0 |
137 |
26 |
A |
\(n_{tsl} = 15\) |
165.96 |
5.60 |
162.71 |
150.61 |
140.68 |
0.27 |
0 |
141 |
86 |
A |
\(n_y = 60\) |
165.97 |
5.60 |
162.69 |
150.62 |
140.72 |
0.27 |
0 |
136 |
24 |
A |
\(m = n = 12\) |
165.97 |
5.60 |
162.70 |
150.62 |
140.70 |
0.27 |
0 |
136 |
57 |
A |
\(\Delta w_p\) halved |
166.16 |
5.68 |
– |
– |
140.70 |
0.19 |
0 |
262 |
46 |
B |
reference |
165.36 |
5.80 |
162.76 |
150.42 |
140.75 |
0.16 |
0 |
132 |
27 |
B |
\(n_{tsl} = 15\) |
165.35 |
5.80 |
162.77 |
150.42 |
140.74 |
0.16 |
0 |
133 |
80 |
B |
\(n_y = 60\) |
165.34 |
5.80 |
162.77 |
150.41 |
140.76 |
0.16 |
0 |
131 |
25 |
B |
\(m = n = 12\) |
165.37 |
5.80 |
162.76 |
150.42 |
140.75 |
0.16 |
0 |
131 |
54 |
B |
\(\Delta w_p\) halved |
165.60 |
5.68 |
– |
– |
140.75 |
0.27 |
0 |
208 |
37 |
The load after the peak for different numbers of terms along \(x\) of the cohesive domain is given below, in N. With 10 terms the load drops in steps; with 15 or more the curves coincide.
\(w_p\) |
A, 10/120 |
A, 15/120 |
A, 25/180 |
B, 10/120 |
B, 15/120 |
B, 25/180 |
|---|---|---|---|---|---|---|
4.818 |
147.66 |
147.65 |
147.65 |
146.78 |
146.75 |
146.73 |
5.000 |
152.56 |
152.54 |
152.54 |
151.61 |
151.51 |
151.50 |
5.200 |
157.78 |
157.72 |
157.72 |
156.76 |
156.57 |
156.56 |
5.400 |
162.69 |
162.54 |
162.53 |
161.67 |
161.27 |
161.26 |
5.600 |
166.68 |
165.96 |
165.95 |
166.07 |
165.03 |
165.08 |
5.800 |
167.16 |
165.41 |
165.39 |
168.17 |
165.36 |
165.22 |
6.000 |
161.95 |
162.70 |
162.67 |
161.19 |
162.76 |
162.64 |
6.200 |
160.49 |
160.01 |
159.97 |
159.99 |
160.08 |
160.04 |
6.400 |
159.73 |
157.50 |
157.49 |
160.27 |
157.70 |
157.48 |
6.600 |
155.19 |
155.00 |
155.09 |
156.00 |
154.96 |
155.09 |
6.800 |
151.36 |
152.99 |
152.72 |
150.28 |
153.01 |
152.75 |
7.000 |
150.76 |
150.61 |
150.58 |
150.41 |
150.42 |
150.58 |
7.200 |
150.00 |
148.39 |
148.44 |
150.32 |
148.45 |
148.41 |
7.400 |
145.73 |
146.54 |
146.42 |
144.61 |
146.46 |
146.45 |
7.600 |
142.80 |
144.34 |
144.43 |
141.96 |
144.26 |
144.47 |
7.800 |
142.10 |
142.38 |
142.49 |
142.02 |
142.59 |
142.61 |
8.000 |
141.20 |
140.70 |
140.62 |
141.41 |
140.75 |
140.78 |
The results show that:
The Ritz basis of the cohesive domain sets the shape of the response after the peak. With \(m_{tsl} = 10\) the load drops in steps separated by plateaus (\(CV = 0.73\)–\(1.08\)), and the peak is 0.7% (A) and 1.8% (B) above the converged value. From \(m_{tsl} = 15\) the curve is smooth (\(CV \leq 0.27\)), and \(m_{tsl} = 15\), 20 and 25 give the same peak within 0.01 N (A) and 0.15 N (B), and the same loads after the peak within 0.3 N. The opening ahead of the process zone decays as that of a beam on an elastic foundation, with the rate \(\lambda = (k_o/4D_{11})^{1/4}\); it is 0.59 mm⁻¹ in case A and 0.83 mm⁻¹ in case B. The converged \(m_{tsl} = 15\) over \(L_{tsl} = 17\) mm corresponds to \(m_{tsl} = 1.5\,\lambda L_{tsl}\) in case A and \(1.06\,\lambda L_{tsl}\) in case B; \(m_{tsl} \approx 1.5\,\lambda L_{tsl}\) is used as a conservative rule for other geometries.
The number of Gauss points along \(x\) sets the robustness, not the converged answer. With \(n_x = 60\) the loads are within 0.5 N of those with \(n_x \geq 120\), but 1 to 10 increments needed bisection and the iterations increased 1.5 to 5.4 times, because the crack front crosses several integration points in one increment (see Solution procedure). With \(n_x = 120\) and 180 no increment was bisected in any run. The cohesive zone length, estimated as \(l_{cz} = 0.88\,E_2 G_{Ic}/\tau_o^2\) (Rice’s model, Turon et al. 2007 [turon2007MeshSize]), is 1.43 mm in case A and 1.96 mm in case B; \(n_x = 120\) over 17 mm gives a spacing of the Gauss points at the middle of the domain of \(\pi L_{tsl}/(2 n_x) = 0.22\) mm, about \(l_{cz}/6.4\) in case A, i.e. \(n_x \approx 10\,L_{tsl}/l_{cz}\). This is the rule used for other geometries.
The discretisation along \(y\) and of the other domains does not matter here. \(n_{tsl} = 15\), \(n_y = 60\) and \(m = n = 12\) change the loads by at most 0.02 N, since the specimen is uniform across the width.
Halving the increment changes only where the peak is sampled. The peak rises by 0.2 N (0.12%) and moves to \(w_p = 5.68\) mm, closer to the true maximum; the loads on the common increments are the same.
The recommended discretisation for this DCB is therefore \(m_{tsl} = 15\), \(n_x = 120\), \(n_{tsl} = 10\), \(n_y = 30\), with \(8 \times 8\) terms in the other domains. It gives \(P_{max} = 165.96\) N at \(w_p = 5.6\) mm in case A and 165.36 N at 5.8 mm in case B, in about 26 min of wall time on a shared machine, against about 171 N at about 6 mm for the finite element model of the thesis (Section 5.6).
Validation against the literature#
The model was compared with eight references that report mode I DCB
results: Alfano and Crisfield (2001) [alfano2001Interface], Camanho et al.
(2003) [camanho2003Delamination], Turon et al. (2007) [turon2007MeshSize],
Krueger (2008) [krueger2008DCB], Tijs et al. (2022) [tijs2022Interlaminar],
Leciñana et al. (2023) [lecinana2023Fatigue] and the PhD thesis of Tijs
(2023) [tijs2023PhD], plus Krueger (2012) [krueger2012MMB], whose benchmarks
are for the mixed-mode bending specimen and are only recorded, see below.
Each reference has a notebook in notebooks/ with a dictionary of the FE
cases and one of the experimental tests, a comparison table, a plot and a
discussion; the panels results are stored in notebooks/results/*.npz
and collected by notebooks/validation_summary.ipynb.
Model. notebooks/dcb_utils.py builds a symmetric DCB: CLPT arms, far
end clamped, arm tips opened to \(\pm\delta/2\) by prescribed displacements,
the load being the reaction of the prescribed displacement. The bonded region
is split into a cohesive domain ('SB_TSL', bilinear law) of length
\(L_{tsl}\) ahead of the initial crack front and a perfect bond ('SB') over
the rest, such that only the region reached by the crack needs the resolution
of the cohesive zone. A weld narrower than the specimen (Tijs 2023) is
represented by starting the integration points outside the bonded strip fully
damaged. The solution procedure is the one described in
Solution procedure. The discretisation follows the rules of the
convergence study (dcb_utils.discretize): \(m_{tsl} = \lceil 1.5\,\lambda
L_{tsl} \rceil\) with at most 25 terms, and \(n_x = 10\,L_{tsl}/l_{cz}\), but not
less than \(4\,m_{tsl}\) to integrate the products of the approximation
functions, rounded up to a multiple of 10 and with at most 300 points, and
\(L_{tsl}\) covers the crack growth plus a margin
of \(2\pi/\lambda + 3\,l_{cz}\) for the process zone and the compressive lobe
ahead of it; the range of openings is limited so that \(L_{tsl}\) stays
resolved, which allows 5–13 mm of crack growth. The penalty stiffness is
\(k_o = 10^5\) N/mm³: a longer decay length \(1/\lambda\) needs fewer terms, and
for the DCB of Turon et al. (2007) the peak load with the \(k_o = 10^6\) N/mm³
of the paper differs by 0.04% (64.07 against 64.05 N), in line with their
Fig. 9. The reference curves of linear elastic fracture mechanics (LEFM) are
the simple and the corrected beam theories, the latter with the crack length
\(a + \chi h\) of Williams, \(\chi = \sqrt{E_{11}/(11 G_{13})\,[3 -
2(\Gamma/(1+\Gamma))^2]}\), \(\Gamma = 1.18\sqrt{E_{11}E_{22}}/G_{13}\), and the
bending stiffness \(D_{11} b\) of the arm.
Data. Values given in tables of the references are used as such (\(^{t}\) in the table of peak loads below); curves were read from the figures by eye (\(^{d}\)), with an uncertainty of about 2–5 N, and \(^{m}\) marks the mean of the digitised peaks of several tests (full weld: 150 and 170 N; weld center: 122–136 N). The notebooks state the assumptions needed where the references are incomplete: the opening convention (Alfano and Crisfield plot the displacement of one arm, \(\delta = 2u\)), the crack length of one test of Tijs et al. (2022) inferred from its compliance, and the elastic properties and length of the welded specimens of Tijs (2023).
case |
|
|
FE \(P_{max}\) |
diff. FE |
test \(P_{max}\) |
diff. test |
CBT \(P_{max}\) |
diff. CBT |
\(\Delta K_0\) |
\(\Delta a\) |
|---|---|---|---|---|---|---|---|---|---|---|
Alfano 2001, Table I, \(t_o\) = 57 MPa |
64.6 |
1.83 |
61.5 \(^{d}\) |
+5.0 |
– |
– |
63.2 |
+2.2 |
+17 |
10.5 |
Alfano 2001, Table I, \(t_o\) = 1.7 MPa |
50.9 |
2.90 |
49.5 \(^{d}\) |
+2.9 |
– |
– |
63.2 |
-19.4 |
-24 |
5.8 |
Alfano 2001, XAS-913C |
93.8 |
1.91 |
90.0 \(^{d}\) |
+4.2 |
– |
– |
91.6 |
+2.3 |
+17 |
10.6 |
Camanho 2003, AS4/PEEK |
139.9 |
4.12 |
155.3 \(^{t}\) |
-9.9 |
147.1 \(^{t}\) |
-4.9 |
138.9 |
+0.7 |
+13 |
8.2 |
Turon 2007, T300/977-2 |
64.1 |
4.18 |
57.0 \(^{d}\) |
+12.4 |
62.0 \(^{d}\) |
+3.3 |
63.3 |
+1.3 |
+12 |
13.0 |
Krueger 2008, UD \([0]_{24}\) |
63.6 |
1.40 |
60.7 \(^{b}\) |
+4.7 |
– |
– |
62.3 |
+2.1 |
+18 |
9.9 |
Krueger 2008, D±30 |
108.7 |
1.70 |
102.4 \(^{b}\) |
+6.1 |
– |
– |
114.7 |
-5.2 |
+10 |
7.6 |
Tijs 2022, \(a_0\) = 48 mm |
166.2 |
5.68 |
167.0 \(^{d}\) |
-0.5 |
142.0 \(^{d}\) |
+17.0 |
164.5 |
+1.1 |
+14 |
11.8 |
Tijs 2022, \(a_0\) = 40 mm |
197.5 |
3.99 |
– |
– |
161.0 \(^{d}\) |
+22.7 |
194.5 |
+1.5 |
+17 |
11.8 |
Tijs 2023, full weld, 2.1 N/mm |
148.3 |
6.48 |
155.0 \(^{d}\) |
-4.3 |
160.0 \(^{m}\) |
-7.3 |
155.5 |
-4.6 |
+4 |
4.9 |
Tijs 2023, weld center, 2.1 N/mm |
119.2 |
5.75 |
128.0 \(^{d}\) |
-6.9 |
129.0 \(^{m}\) |
-7.6 |
123.0 |
-3.1 |
+8 |
5.2 |
Tijs 2023, weld center, 1.95 N/mm |
115.0 |
5.56 |
122.0 \(^{d}\) |
-5.7 |
123.0 \(^{d}\) |
-6.5 |
118.5 |
-3.0 |
+8 |
5.7 |
Tijs 2023, weld center, 1.12 N/mm |
87.8 |
4.09 |
96.0 \(^{d}\) |
-8.6 |
– |
– |
89.8 |
-2.3 |
+9 |
9.2 |
reference |
specimens, crack lengths |
vs test |
vs CBT |
|---|---|---|---|
Leciñana et al. (2023), Fig. 10 |
UD, 25 mm, \(a_0\) = 32.05–42.97 mm |
-18.9 to -15.5 |
-20.0 to -15.5 |
Tijs (2023), Table 5.4.1 |
autoclave UD, 25 mm, \(a\) = 30–45 mm |
-41.4 to -28.0 |
-20.9 to -14.7 |
Tijs (2023), Table 5.4.1 |
full weld QI, 25 mm, \(a\) = 30–45 mm |
-15.2 to -4.7 |
-12.0 to -6.8 |
Tijs (2023), Table 5.4.1 |
weld center QI, 12.7 mm, \(a\) = 30–45 mm |
-2.1 to +6.6 |
-13.5 to -7.5 |
The results show that:
Same cohesive law as the reference. For the DCB of Tijs et al. (2022), which is also the reference case of the thesis, the FE model of the paper uses the same geometry, material and bilinear law (\(G_{Ic}\) = 1.12 N/mm, \(\tau^0\) = 87 MPa).
panelspredicts 166.2 N at 5.68 mm against 167 N at 5.7 mm, -0.5% on the load and -0.4% on the opening.Cohesive zone beyond LEFM. With the low strength \(t_o\) = 1.7 MPa of Alfano and Crisfield (2001) the process zone is of the order of the specimen length and the peak of their interface model is 22% below the corrected beam theory;
panelsreproduces it within 2.9%, at the same opening and with the same initial stiffness (+3.2%).Nominal strengths. For the unidirectional specimens with nominal strengths, the
panelspeak is within 2.3% of the corrected beam theory in every case, and after the peak it follows the LEFM propagation branch (48.9 against 49.0 N at \(\delta\) = 3.22 mm for Alfano and Crisfield, Table I). The FE results of the references scatter by about \(\pm 10\%\) around the corrected beam theory: 1 mm decohesion elements for a cohesive zone of 1.35 mm in Camanho et al. (2003), whose FE peak is above both the test and the beam theories, and about 57 N in Turon et al. (2007), below both.Tests. The tests with a bilinear-like response are predicted within 5% (Camanho et al. -4.9%, Turon et al. +3.3%). The AS4D/PEKK-FC tests show a strong R-curve (initiation about 0.7 N/mm, propagation 1.12 N/mm) that a bilinear law with the propagation toughness cannot represent:
panels, the bilinear FE model of Tijs et al. and the corrected beam theory are all 15–23% above these tests, which the tabular law of the paper matches. Fibre bridging also makes the experimental curves decrease more slowly than every model after the peak.Welded joints. For the welded DCB of Tijs (2023)
panelsis 4–9% below the FE results of the thesis, 2–5% below the corrected beam theory and 6.5–7.6% below the tests with a single toughness value. The cohesive zone is long compared with the arm thickness (\(l_{cz}\) = 2.5–2.7 mm, \(h\) = 2.24 mm), which lowers the peak below the LEFM limit; the FE model of the thesis is not described in enough detail to separate this effect from its modelling assumptions.Initial compliance. The CLPT arms of
panelsare too stiff for the unidirectional specimens: the compliance is 15–19% below the tests and 15–21% below the corrected beam theory, which matches the tests of Leciñana et al. within 4%. The arms have no transverse shear deformation, which is large for these materials (\(E_{11}/G_{13}\) = 22–27), and the rotation at the crack front comes only from the elastic foundation of the cohesive interface. The same appears in the load-opening curves as an initial stiffness 12–17% above the corrected beam theory, while the peak loads, controlled by the energy release rate, are not affected. For the quasi-isotropic welded specimens, with a bending modulus closer to the shear modulus, the compliance ofpanelsis within 15% of the tests.Robustness. All 16 nonlinear runs converged at every opening without bisection.
Krueger (2008). NASA/TM-2008-215123 [krueger2008DCB] gives two mode I DCB
benchmarks, a unidirectional \([0]_{24}\) specimen of T300/1076 and a
multidirectional D±30 specimen of C12K/R6376, built with 3D solid elements and
the virtual crack closure technique, with no cohesive law, no interfacial
strength and no experiment. Their critical load is the one at which \(G_T\)
reaches \(G_c\) at mid-width, while panels and beam theory follow the
width average \(\bar{G} = P_{crit}^2 a_e^2/(b\,EI)\); the two criteria differ
by \(\sqrt{G_c/\bar{G}}\), 1.026 and 1.123, which is the whole offset between
the benchmark and the corrected beam theory. panels is 2.1% above the
corrected beam theory for the unidirectional specimen and 5.2% below it for
the multidirectional one, whose cohesive zone (\(l_{cz}\) = 1.99 mm with
\(\tau_o\) = 40 MPa) is not small compared with its 2.0 mm arms. Raising
\(\tau_o\) from 40 to 60 MPa moves the peaks by 1.0 and 1.2% only, so the
comparison does not rest on that choice. See
notebooks/krueger2008_dcb.ipynb.
Krueger (2012). NASA/CR-2012-217562 [krueger2012MMB] gives benchmarks
for the mixed-mode bending specimen of IM7/8552 at \(G_{II}/G_T\) = 0.2, 0.5 and
0.8, with the critical points (1.64 mm, 128.5 N), (1.34 mm, 385 N) and (1.65
mm, 751 N). They are recorded in notebooks/krueger2012_mmb_benchmark.ipynb
but not simulated: the damage of 'SB_TSL' is driven by the normal
separation only, and the loading lever is not modelled.
Differences that remain#
The interpenetration stiffness \(k_{ipen}\) of Eq. 5.12 is computed by
calc_kw_tsl()but not used:MultiDomain.calc_k_dmg()returns \(k_o(1-d)\) also for negative separations, such that a fully damaged point offers no resistance to interpenetration. This does not affect a monotonically loaded DCB.The damage history
MultiDomain.dmg_indexis stored once per assembly, which restricts the model to one'SB_TSL'connection.The finite element model of Section 5.6 of the thesis constrains \(U_x\) along the loaded edge, while the Ritz model leaves \(u\) free there.
The arms follow CLPT: without transverse shear deformation, the compliance of unidirectional DCB specimens is 15–21% below the corrected beam theory (see the validation above). A shear deformable kinematics would remove this difference.
The cohesive law is bilinear and the damage is driven by the normal separation only: R-curve effects (multilinear laws) and mixed-mode delamination are not represented.