How to efficiently find resultant forces at some plane


may anybody suggest which is the best way to select some plane through the model and sum forces or stresses over it to obtain the resultant values. I tried to bracket horizontal plane near the foundation of the wall, for example with “if 0.99 < block.subcontact.pos.z(cx) < 1.01 then…” and use “block.subcontact.force.shear(cx)”, “block.subcontact.force.norm(cx)”, etc. for summation over it, but resultant values are not equal to the wall reaction forces.

Thanks in advance!

Sounds like that should work. Maybe you can send your model to tech support?

I tried to isolate horizontal wall section by height and sum shears over it. But, at some sections equilibrium with external load and reaction force is maintained and at other sections it is not. It seems that different mesh orientation of elements at left and right boundary (592.0 KB)
makes such error. Simple linear model is attached. Just change pos=3 (correct solution) with pos=2 (wrong solution) in the source file, line 67. Solutions are plotted in the Plot02 window, and for the pos=3, loading, reaction force and sum of shears are similar, except for the sign. But for the pos=2, loading and reaction force are similar (except for minus sign) and sum of shears does not match with them. I also sent similar (little complicated) model to tech support, but they not responded yet.

Hi Damir,
We have recieved your question at tech support. It may take some time to look at the details of the model and debug. But we’ll get to you as soon as possible.
All the best for you,


Dear Rima,

really appreciate Your care!



If input file ‘wall_1m.wrl’ is excluded from the model and gridpoint id
at lines 51, 101 and 105 of the source file are adjusted accordingly (see screenshot), then equilibrium is correct in every horizontal wall section. Maybe, this information can help.

Hi Damir,

I rebuilt the same geometry with commands (without importing a wrl file), simply by hiding + cutting with the command “block cut joint-set”. In this case there is no problem, the sum of shear forces on each joint horizontal plane gives the right value. I suspect the problem comes from building the geometry from two successive “wrl” files. @jhazzard do you have any inputs on this ?

Best regards,


Here is the modified file in case you would like to test it
shear_wall_test_inside.dat (3.7 KB)

Dear Rima,

thanks a lot. Works perfectly. But how do I proceed with the huge and complicated model built as a series of wrl files? If such model has to be generated with a group of commands we are dead lost - completely. The shear_wall_test is only one of our benchmarks used for the main model calibration (screenshot is attached inside topic “out of memory in 3DEC”). Unfortunately, I checked with the authorities, according to our contract it is not permitted to send the main model around.



Hello Damir,

If you want to import a series of wrf files, just keep in mind that you should generate zones only after importing all blocks.


Dear Huy,

thanks for the hint! I tried that, with no success. I generated hexahedra
elements at the end of the geometry input (see screenshot). Again, some
section works, some of them not. Really sorry if I misunderstood something.



oh, instead of hexahedral zones, why don’t you use " block zone generate edge 1 " for example?

Tried that earlier. Does not resolve the problem. I think that problem is not mesh
dependent. Equilibrium is violated, regardless of the element type.


model does not work even if a single wrl file is used to form the wall.
For example: (3.7 KB)



Hi Damir,
We are investigating on the reasons of this difference. Will get back to you as soon as possible.

It took me a while, but I finally figured this one out. When you import blocks from VRML, they can come in at different orientations. This doesn’t affect the mechanical behavior, but it does affect the shear direction at each joint. So depending on the orientation of the imported blocks, right-lateral shear at a given contact may be positive or negative. When you cut the blocks in 3DEC, they all have the same orientation so it all works out.

So, you can get the result you want from your model by changing your FISH function slightly. Here it is (only calculating shear forces here):

fish def shear_total_1
local shear_forces = vector(0,0,0)
loop foreach cx block.subcontact.list
pos = block.subcontact.pos.z(cx)
if pos = 1 then
local host =
local norm =
shear_forces += block.subcontact.force.shear(cx)*norm->z

Dear Jim!

I needed some time to go over different tests. They all check out.
Thanks a lot!