Contacts disappear during meshing phase

Hi again, everyone!

On another model, we have been facing difficulties getting a functional mesh: during meshing, some contacts “disappear”.
We had to do some trial-and-error to get a mesh with the full contact set and a small step aside brings those “lost” contacts after meshing.


The model is quite simple: 1 main contact and 2 contacts stopping on the first one.
Changing the mesh size or the tolerances (atol, btol, ctol…) did not affect this issue.
However, those aspects did:

  • moving one of the secondary faults a bit (option shift_fz3=true in script below)
  • making one or both of the secondary faults persistent (options persistent_fz2=true and/or persistent_fz2=true in script below)

Would you have any advice to avoid this bias?

Thank you!

Cheers

Theophile

Test script
model new

def testing_options
    ; true -> meshing ok
    global shift_fz3 = false
    ; true -> meshing ok
    global persistent_fz2 = false
    ; true -> meshing ok
    global persistent_fz3 = false
end
[testing_options]

block create prism &
    face-1 &
        (7069.758733347873, 9148.399873964489, -4000.0) &
        (7069.758733347873, -6531.6001260355115, -4000.0) &
        (-9300.241266652127, -6531.6001260355115, -4000.0) &
        (-9300.241266652127, 9148.399873964489, -4000.0)) &
    face-2 &
        (7069.758733347873, 9148.399873964489, -150.0) &
        (7069.758733347873, -6531.6001260355115, -150.0) &
        (-9300.241266652127, -6531.6001260355115, -150.0) &
        (-9300.241266652127, 9148.399873964489, -150.0)

def set_fz_params
    local shift = vector(0,0,0)
    if shift_fz3
        shift = vector(1000,0,0)
    end_if
    global fz_params = map()
    fz_params('fz1') = map('origin', vector(0.0, 0.0, -1581.554472958834), 'dip', 80., 'dip-direction', 200.)
    fz_params('fz2') = map('origin', vector(1059.344431650592, 3186.130495247431, -2101.024712960352), 'dip', 31.242008374994324, 'dip-direction', 128.59707580316046)
    fz_params('fz3') = map('origin', vector(-1471.5217985903146, -1418.440081932582, -1450.0)+shift, 'dip', 29.906306040857892, 'dip-direction', 117.13464181198472)
end
[set_fz_params]

; Main contact    
block cut joint-set &
    origin [fz_params('fz1')('origin')->x],[fz_params('fz1')('origin')->y],[fz_params('fz1')('origin')->z] &
    dip [fz_params('fz1')('dip')] &
    dip-direction [fz_params('fz1')('dip-direction')]
; Tag sides
block group "fz1=above" range plane &
    origin [fz_params('fz1')('origin')->x],[fz_params('fz1')('origin')->y],[fz_params('fz1')('origin')->z] &
    dip [fz_params('fz1')('dip')] &
    dip-direction [fz_params('fz1')('dip-direction')] &
    above
block group "fz1=below" range group "fz1=above" not
; Secondary contacts
def hide_fz1_above
    if persistent_fz2==false
        command
            block hide range group "fz1=above"
        end_command
    end_if
end
[hide_fz1_above]
block cut joint-set &
    origin [fz_params('fz2')('origin')->x],[fz_params('fz2')('origin')->y],[fz_params('fz2')('origin')->z] &
    dip [fz_params('fz2')('dip')] &
    dip-direction [fz_params('fz2')('dip-direction')]
block hide off
def hide_fz1_below
    if persistent_fz3==false
        command
            block hide range group "fz1=below"
        end_command
    end_if
end
[hide_fz1_below]
block cut joint-set &
    origin [fz_params('fz3')('origin')->x],[fz_params('fz3')('origin')->y],[fz_params('fz3')('origin')->z] &
    dip [fz_params('fz3')('dip')] &
    dip-direction [fz_params('fz3')('dip-direction')]
block hide off

block zone generate edge 1000

This appears to be a plotting issue. You can plot contacts and see that the “missing” contact exists. It is initially mistyped as an edge-edge contact, so the joint plane is not plotted. If you give the command “block contact gen-sub” it will become a face-face contact (note that this same regeneration of subcontacts occurs before applying stresses, or cycling or anything else that needs them). The joint plane plot will eventually retriangulate itself if you are running in large strain and the missing joint will appear. You can force the retriangulation with the command BLOCK JOINT-PLANE DELETE. Then regenerate the plot. Note that this triangulation is only used for plotting. All of this should not affect the calculations.

Hi.

Thank you, @jhazzard , it worked!

Cheers

Theophile