Ok, I finally got some time to digest this. Thank you for pointing this out, Bruno, it may have pretty severe impacts on DFNFlow simulations. In my opinion, we would just *add* the crack volume to the original pore volume. Let me see if I can explain why I think this: It seems we need to agree on how the crackArea and crackAperture are computed for these volume calcs. Each cell is currently associated with a unique crackArea [1], but I am unsure what the geometry of the current C++ lines represent [2]. I am particularly confused by [3]. I guess I need someone to translate that for me. If I were to imagine a plane that represents the crackArea, I would probably change the existing code to look something like this: if (calcCrackArea) { CVector edgeMidPoint = ( ed_it->first->vertex(ed_it->second)->point().point() +ed_it->first->vertex(ed_it->third)->point.point() ) / 2; CVector v1 = edgeMidPoint - CellCentre1; CVector v2 = edgeMidPoint - CellCentre2; Real halfCrackArea = 0.25*sqrt(std::abs(cross_product(v1, v2).squared_length())); cell1->info().crackVol += halfCrackArea*aperture cell2->info().crackVol += halfCrackArea*aperture; } Which would give us a crack plane that looks like this following poorly drawn figure: [image: Inline image 1] In this scheme, the volume of the crack (crackVol in code above) within a cell is simply the sum of all halfCrackArea_i*aperture_i where i indexes the broken edge. Then we can add this volume to the original pore volume. It's as if we are artificially creating volume space that is not reflected by the packing geometry. Which is kind of what this all boils down to, right? Or maybe I am totally lost. If you guys think this is worth testing, I will implement, test, and report back. Cheers, Robert [1] https://github.com/yade/trunk/blob/master/pkg/pfv/DFNFlow.cpp#L269 [2] https://github.com/yade/trunk/blob/master/pkg/pfv/DFNFlow.cpp#L263 [3] https://github.com/yade/trunk/blob/master/pkg/pfv/DFNFlow.cpp#L266 On Wed, Dec 6, 2017 at 2:52 AM, Bruno Chareyre