gem / oq-engine

OpenQuake Engine: a software for Seismic Hazard and Risk Analysis
https://github.com/gem/oq-engine/#openquake-engine
GNU Affero General Public License v3.0
375 stars 272 forks source link

Find a decent WKT representation for NonParametric sources #5648

Open micheles opened 4 years ago

micheles commented 4 years ago

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 commented 4 years ago

@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 commented 7 months ago

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