Closed krober10nd closed 4 years ago
I don't quite understand. If you project your boundary nodes to the boundary, what good is repeating this five times?
Solving an optimization problem using multi-Newton type approach. Generally converges in less than 5 iterations.
I don't know what you mean. What do you optimize? You project the mesh boundary nodes onto the boundary, right? Do you mean the Newton iteration you use to achieve that converges in 5 iterations, and you use some dampening?
And what do you mean by "multi"-Newton?
https://github.com/krober10nd/SeismicMesh/pull/84#issuecomment-706766010
and per the original thesis where the method was documented
http://persson.berkeley.edu/thesis/persson-thesis-color.pdf
page 31 (in fact this is where it is suggested to iteratively repeat and lower the dampening coefficient).
There's other citations as well.
And what do you mean by "multi"-Newton?
I mean because you're finding the root of f(d) given that the vertex perturbation must be normal to the level-set (multi = multiple conditions).
given that the vertex perturbation must be normal to the level-set
Sound more like steepest-descend, right? Newton won't be orthogonal to the level set, but that doesn't matter much.
Okay, if I understood you correctly now, you're using 5 steps of a dampened Newton method to project the points back to the domain boundary. Is this correct?
In dmsh, each domain is free to provide a boundary_step()
method. This makes things a bit easier for cubes, balls etc. since you can project back to the boundary so easily. No need for Newton. It'd be my advice to the same for SeismicMesh. If the domains are getting more complex (e.g., unions etc.), Newton is handy.
Okay, if I understood you correctly now, you're using 5 steps of a dampened Newton method to project the points back to the domain boundary. Is this correct?
yep, that's correct.
In dmsh, each domain is free to provide a boundary_step() method. This makes things a bit easier for cubes, balls etc. since you can project back to the boundary so easily. No need for Newton. It'd be my advice to the same for SeismicMesh. If the domains are getting more complex (e.g., unions etc.), Newton is handy.
Interesting. I'll check it out. Thanks for the suggestion. I had some people complaining about dents so I found that this approach seemed to produce a dramatic improvement in the boundary shape.
Projection to a cube is too easy if it's aligned with the axes: just min/max the coordinates. The nice thing about that it's fast and you don't have to think about newton convergence.
just min/max the coordinate
ah very clever, danke.
I think I'll leave the boundary projection step for each geometry on my to-do list and leave this more general expensive solution that I have here for now.
I like the idea of snapping geometry using min/max for the cube but for other geometries, it's not immediately obvious what to do.
In #167 I took a stab considering your recommendation to avoid the steepest descent/Newton boundary projection step for simple geometric primitives...cubes/rectangles.
I still need to work how best to do it in 3d efficiently.
alpha
. Prior, it was only solved at the end of mesh generation.dmsh
? The halving dampening coefficient is heuristic but seems to work well..