When using snappyHexMesh, I try to increase the nFeatureSnapIter parameter.

But if I set nFeatureSnapIter to 10 (for example), the snapping phase gives up most of the time after around 8 iterations (often because of one cell staying out of the quality criteria). This results in poor surface and feature lines quality.

Did one of you manage to increase the nFeatureSnapIter parameter without giving up the snapping ?

OK this is an old question, but if someone is still interested I 'd like to share my trial and error way to handle the snapping. I work with dirty .stl surfaces from laser-scanned mountain torrents with hole filling in meshLab. But still the .stl surface is not always waterproof so I have to work with mode distance in refinementRegions, and I have to take care of the memory use of SHM.

I do a three stepp procedure. First I refine my mesh, then copy the refined mesh into the constant/polmesh folder and run a second slightly different snappyHexMeshDict for snapping. Finally I delete cells that have bad quality.

The first snappyHexMesh used for refinement has the settings addLayers false and doLayers false but castellatedMesh and snap true. At castellatedMeshControls I put as much maxGlobalCells as memory may handle. To get sufficient cell refinements close to the .stl surface I use nCellsBetweenLevels 1, so the mesh gets rapidly finer. Then I use
refinementSurfaces
{
'nameOfSTL'
{
level (2 3);
faceZone 'nameOfSTL';
faceType baffle;
}
}

and

refinementRegions
{
'nameOfSTL'
{
mode distance;
levels (('fineRefinementDistanceInMeters' 2) ('coarseRefinementDistanceInMeters' 3));
}
}
After snappyHexMesh has finished, I take the mesh from the last timeFolder and paste it into constant/polymesh. Then I delete the empty zone files and in the file boundary the empty master and slave boundaries, and adjust the number of boundaries at the beginning of the boundary file.

Now I change the snappyHexMeshDict and use
refinementSurfaces
{
'nameOfSTL'
{
level (2 3);
}
}
Within the snapControls I use implicitFeatureSnap true, and I use nFeatureSnapIter 20 but look at the progress at which morph iteration the snapping fails. Dependent on the failure I eighther reduce the settings at meshQualityControls or reduce the nFeatureSnapIter to an interation that was still OK. Increasing nRelaxIter, nSmoothScale and sometimes errorReduction can help here to let snappyHexMesh try longer to move the mesh within each morph iteration.

Finally I use the setSet and subsetMesh cellsToDelete -overwrite approach to yust turn bad cells into boundaries as described in the master thesis of Alexander Ivchenko "Incorporation of OpenFOAM software into Computational Fluid Dynamics process in Volvo Technology", (I think someone really helpful posted a link to the thesis here on the Forum before), but this only works as long as your mesh does not get subdivided in unreachable sections.