In 3DEC, joint failure is associated with subcontacts. However the subcontacts represent points, so it is not easy to plot them as 2D “cracks”. This is different from UDEC where the contacts are lines that can be easily plotted.
Assuming you have a BBM type model (i.e. a model with lots of blocks and contacts, rather than a model with a few large joints), you could group the contacts according to the subcontact failures, and then plot joints and range by the group names. Example FISH function below. This generates the plot shown below for the fragmentation example in the manual.
fish def plot_cracks
loop foreach cp block.contact.list
count = 0
broken = 0
loop foreach cx block.contact.subcontact(cp)
count += 1
if block.subcontact.state(cx) > 0
broken += 1
endif
end_loop
if broken = count
block.contact.group(cp) = 'fully-cracked'
else if broken > 0
block.contact.group(cp) = 'partially-cracked'
endif
end_loop
end
[plot_cracks]
; same function multi-threaded
fish operator plot_cracks_multi(cp)
local count = 0
local broken = 0
loop foreach local cx block.contact.subcontact(cp)
count += 1
if block.subcontact.state(cx) > 0
broken += 1
endif
end_loop
if broken = count
block.contact.group(cp) = 'fully-cracked'
else if broken > 0
block.contact.group(cp) = 'partially-cracked'
endif
end
[plot_cracks_multi(::block.contact.list)]