Modeling Centrifuge Test with Attached Boundary Conditions in FLAC

Hello Everyone,

I am currently working on modeling a centrifuge test at prototype scale. My geometry includes three liquefiable sand layers with varying relative densities (Dr), so I am using the PM4Sand model. The experiment I am replicating was conducted with ring containers on each side of the box. To mimic these side boundaries, I chose to attach the left and right side gridpoints instead of using a free-field boundary condition. Below is the FISH function I wrote for this purpose:

fish define _Attach_Side_Boundaries
global M_xMin, M_xMax, _Attach_List
local _gp, _a, _b, _side_gp, _id1, _id2
loop foreach _gp gp.list
if gp.pos.x(_gp) == M_xMin
_a = M_xMax
_b = gp.pos.y(_gp)
_side_gp = gp.near(_a,_b)
_id1 = gp.id(_gp)
_id2 = gp.id(_side_gp)
command
zone attach gridpointid [_id1] to-gridpointid [_id2] snap on
endcommand
endif
endloop
_Attach_List = attach.list
end

My question is this: I encountered an “illegal geometry” error when using the snap on option. However, if I turn the snap option off, the code runs without error. I believe that the snap option should be enabled due to the nature of the centrifuge test. Does anyone have suggestions for resolving this issue or improving my approach to modeling attached boundaries?

Thank you for any advice.

The snap option should be off.
Please refer to the doc at
https://docs.itascacg.com/itasca920/flac3d/zone/doc/manual/zone_manual/zone_commands/cmd_zone.attach.html#zone.attach

When snap is off, two girdpoints have the same displacements, velocities and accelerations.
When snap is on, two gridpoint will have the same positions in addition to d/v/a, which is not as expected.

1 Like

Thank you for the response. I have a few more questions on this topic. I am interested in applying a tied degree of freedom condition using the zone attach by-face command. However, when I use this command, it only connects adjacent boundary faces. Is there a way to attach non-adjacent boundary faces, such as the left and right boundary faces, using zone attach by-face? If not, is there an alternative approach to achieve this condition for non-adjacent boundaries or should I continue by attaching the side gridpoints?

Yes, use the command “zone attach gridpointid id1 to-gridpointid id2 snap off”, or use the FISH intrinsic “local a1 = attach.create(gppointer1, gppointer2)”, and set "attach.snap (a1) = 0".

Dear Sir,

I am trying to apply zone attach gridpointid command for my dynamic boundary condition. could please check my commands here:

[M_xMin = -9.15]
[M_xMax = 114.75]
[M_yMin = -9.15]
[M_yMax = 56.45]

program call ‘Attach_FBeam_West_East’
program call ‘Attach_FBeam_South_North’

fish define Attach_FBeam_West_East
global M_xMin, M_xMax, _Attach_List

local gp1, gp2
local id1, id2
local y1, z1
local tol

tol = 1.0e-4

loop foreach gp1 gp.list
    if math.abs(gp.pos.x(gp1) - M_xMin) < tol then

        y1 = gp.pos.y(gp1)
        z1 = gp.pos.z(gp1)

        gp2 = gp.near(M_xMax, y1, z1)

        id1 = gp.id(gp1)
        id2 = gp.id(gp2)

        command
            zone attach gridpointid [id1] to-gridpointid [id2] snap off
        endcommand

    endif
endloop

_Attach_List = attach.list

end

fish define Attach_FBeam_South_North
global M_yMin, M_yMax, _Attach_List

local gp1, gp2
local id1, id2
local x1, z1
local tol

tol = 1.0e-4

loop foreach gp1 gp.list
    if math.abs(gp.pos.y(gp1) - M_yMin) < tol then

        x1 = gp.pos.x(gp1)
        z1 = gp.pos.z(gp1)

        gp2 = gp.near(x1, M_yMax, z1)

        id1 = gp.id(gp1)
        id2 = gp.id(gp2)

        command
            zone attach gridpointid [id1] to-gridpointid [id2] snap off
        endcommand

    endif
endloop

_Attach_List = attach.list

end

Thanks