Stress normal boundary conditions seems inconsistent

Hi,

I am trying to apply normal stress boundary conditions with fish and I am a little confused by how it works in FLAC3d.

Here is a minimal viable example to showcase my issue.

I apply a normal stress boundary condition on the top of a box model using a fish function and run the model for 2 step to visualize the result. See code and plot below.

model new

model large-strain off

zone create brick size 8 8 8 ratio 1 1 1

zone face skin

zone cmodel elas

zone prop dens 2000 young 1e9 poi 0.3

zone face apply velo-normal 0 range group "bottom" or "east" or "west" or "north" or "south"

fish def stress_callback

loop foreach gp gp.list

    gp.force.load(gp) = (0,0,0)

end_loop

loop foreach zone zone.list

loop i (1,6)

    Current_stress = vector(0,0,1e5/4)

    if zone.face.group(zone,i,"Skin") = "Top"

        gplist = zone.face.gp(zone,i)

        loop foreach gp gplist

            gp.force.load(gp) = gp.force.load(gp) - Current_stress

        end_loop

    end_if

end_loop

end_loop

end

[stress_callback]


model step 2

This is fine and I get what I want.

Now I want to make sure that there are not an issue when the faces have different surface areas as in my real application this will be the case.

Therefore I apply a ratio in the x direction of my box. Given the simplicity of the model I am expecting to have exactly or nearly exactly the same results. Only line 5 is changed to:

zone create brick size 8 8 8 ratio 1.1 1 1

This gives the following results that I did not expected.

The normal stress-vector is the same but it effects on the stress within the box surprised me.

So I compared it to a model using the zone face apply command as below:

model new

model large-strain off

zone create brick size 8 8 8 ratio 1.1 1 1

zone face skin

zone cmodel elas

zone prop dens 2000 young 1e9 poi 0.3

zone face apply velo-normal 0 range group "bottom" or "east" or "west" or "north" or "south"



[Current_stress = 1e5]

zone face apply stress-normal [-Current_stress] range group 'top'

model step 100

This gives me a correct result. Therefore, The issue seems to be the face surface area.

To summarize my issue in questions:

  • It seems that gp.force.load is an force applied to a gridpoint. Therefore I need to normalize by the area to get the right stress. It seems to work, but are there other corrections I am not seeing at the moment?
  • Is there a simpler way to apply boundary conditions with fish (or python) that would give me a result very similar to using zone face apply?
  • In the plot: It seems that applied force from the zone vectors item is not what I want to visualized. If I want to look at a boundary condition stress like in my case should I rather use the reaction force instead, but only at the initial stage because once the system is solved the reaction force desappear.

A load applied to a face will be distributed to its gridpoints based on the weights determined by each gridpoint’s tributary area.

You can loop through all relevant faces, then for each face, loop through its gridpoints and distribute the applied load times area equally (accumulating as needed). After this calculation, the gridpoints will have the correct applied load.

1 Like