Negative or zero block volume

In large strain, you may an error message in 3DEC, “negative or zero block volume”. This is caused by the collapsing of very thin blocks or zones in large strain. There are several ways to deal with this:

  • Run in small strain (MODEL LARGE-STRAIN OFF)

  • Try to identify problem blocks in advance. Use RANGE ASPECT-RATIO or RANGE FACE-SIZE to find blocks with bad geometries. It is usually OK to delete these blocks since the holes will close in large strain.

  • Roll back to a save state before the error and delete the block mentioned in the error message.


You can also try increasing the volume at which zones are automatically deleted. There is logic to automatically delete ones when the volume goes negative. This doesn’t always work, which is why you still sometimes see the “negative or zero block volume” error. However, you can set it up so that zones get deleted when the volume is some small number that is greater than 0. This might help because the zones will be deleted before they completely collapse. See here: block zone volume-minimum-delete command — 3DEC 7.0 documentation

1 Like


is it possible to delete blocks from the plot window during cycling, according to strain,
not volume criterion. For example, after discussion with @Rima something like this works after the job is finished:

fish def strain_total
loop foreach iz
if > 1.e-4 then = 1

model solve time 2.
block zone delete range extra 1 0.9 1.1

Hi Damir,
You can execute any function during cycling (every “n” cycle) using a “fish-call”. You need to call the function using the keyword “fish-call” written at the same line as “model solve”. Please refer to the manual for more details. However this might slow down your calculation.
In your case, you need to move the command that deletes the zones inside your fish function (between the two keywords “command” and “end_command”).

I hope this helps.

Thanks @Rima !

Is it possible to continue calculation after all zones of the block are controlled delete?
Block correctly disappeared with zero volume, but the process stopped. Is it possible to bypass this and continue cycling.

Thanks in advance!

Your model stopped because of a negative block volume. I guess your fish function does not delete the strained zones every cycle but every n cycle, so you still can have some errors between two deletes.
You can use the command “block zone volume-minimum-delete command” before you start cycling as mentioned in the post above. This will force the model to delete zones having the minimum volume specified (so before reaching a zero volume).