oq-engine icon indicating copy to clipboard operation
oq-engine copied to clipboard

Find a decent WKT representation for NonParametric sources

Open micheles opened this issue 4 years ago • 2 comments

The South America model fails: https://gitlab.openquake.org/hazard/mosaic/SAM/-/jobs/16426. The reason is that the engine computes a WKT string for the seismic sources; such string is used in the oq plot sources command. For nonparametric sources the WKT is obtained from this formula which is ultra-slow:

    def wkt(self):
        """
        :returns: the geometry as a WKT string
        """
        polys = [rup.surface.mesh.get_convex_hull()._polygon2d
                for rup, pmf in self.data]
        return shapely.geometry.MultiPolygon(polys).wkt

This is a bad idea, we are generating one polygon for each rupture in the source, and then even the realization is ultra-slow. We need a decent formula from @mmpagani . For the moment I am just producing the WKT of the convex hull (see https://github.com/gem/oq-engine/pull/5652).

NB: in the past the SAM model did not fail but only by accident (the .wkt() calls were made in parallel and not sequentially as now). It was still impossible to visualize the sources, so the problem of the wrong formula was still there (BTW, I am responsible for the formula since I had no idea of what to put there).

micheles avatar Mar 14 '20 08:03 micheles

@mmpagani says that we should use a concave hull. Here are two references: https://gist.github.com/dwyerk/10561690 https://towardsdatascience.com/the-concave-hull-c649795c0f0f

micheles avatar Mar 16 '20 08:03 micheles

Another alternative would be to use the library alpha_shapes. The line to change would be https://github.com/gem/oq-engine/blob/engine-3.18/openquake/hazardlib/source/non_parametric.py#L236

micheles avatar Nov 29 '23 10:11 micheles