Release notes v3.23#

Version 3.23 is the new Long Term Support (LTS) release after version 3.16 of two years ago. It features massive benefits in terms of performance, especially for large models (for instance the USA classical PSHA model is 3-4 times faster than it was in version 3.16), and includes many new features.

The complete set of changes is listed in the changelog:

https://github.com/gem/oq-engine/blob/engine-3.23/debian/changelog

A summary of the most recent changes (i.e. with respect to version 3.22) is given below.

Hazard#

The new “Event Based from ruptures.hdf5” feature has been extended to work with an user-provided site model, rather than using the stored site model. Moreover it has been optimized to discard far-away ruptures using the query_ball_tree spatial feature of scipy.spatial.KDTree, with a huge performance improvement.

The rupture_dict dictionary of scenario calculations has been extended to accept to the msr and aspect_ratio keys, which are used to customize the generated planar rupture.

The preclassical calculator has been extended to work in absence of sites: this is useful for source model processing tools such as HAMLET. Moreover, it has been optimized to parallelize better and now it can run significantly faster ( for the USA model it runs 7 times faster then version 3.22, at least for the parallel phase of the analysis).

The change comes together with a different way of grouping the CollapsedPointSources and therefore the hazard curves obtained when using the ps_grid_spacing approximation can be slightly different than before. This is normal, since the ps_grid_spacing approximation is subject to refinements in any new release.

The algorithm used to determine the source weight has been rewritten, reducing in patological cases the slow tasks by an order of magnitude, while keeping the slow tasks in regular cases acceptable.

The parameter pmap_max_mb has been raised by 4 times resulting in up to a 10% speedup in classical calculations at the cost of a slightly larger memory occupation.

The sourcewriter has been changed to store the rupture_idxs dataset in compressed format. This is a huge improvement in models with a large number of multifault sources and we saw a case where the size of the HDF5 file containing the model shrunk down from 400 MB to 17 MB.

The GMPEs for the most recent New Zealand model (NZ_2022) had some missing attributes, causing errors to be raised in calculations using parameters like ‘region’, ‘m_b’, ‘sigma_mu_model’, ‘sigma_mu_epsilon’ or site parameters like ‘backarc’. This has been fixed by Chris Brooks.

Savvinos Aristeidou contributed a new ANN-based GMPE in hazardlib, named aristeidou_2024, and added a few new Intensity Measure Types: FIV3, Sa_avg2, and Sa_avg3.

In the AELO web interface the vs30 input field has been enabled for ASCE7-22.

Risk#

We continued the refactoring of the multi-peril risk framework initiated in the previous release. The documentation about the obsolete format for the consequence files has been removed and we updated the consequence files in all of our tests. We also added a script utils/fix_consequences which is able to fix old consequence files using risk IDs instead of taxonomies (this happens in the presence of a taxonomy mapping).

Many consistency checks were added to the consequence files to make sure that they contains taxonomy strings consistent with the exposure and perils consistent with the vulnerability functions.

We added a new output “Aggregated Exposure Values”, containing the sums of the exposure values aggregated by the tags specified in aggregate_by.

We made it possible to compute quantiles in scenario risk calculations by specifying for instance quantiles = 0.05 0.95 in the job.ini file. The quantiles are computed in the “post-risk” phase and stored in aggrisk_quantiles for each aggregation tag.

We added an extractor for the aggrisk_tags quantity which can be extracted as a pandas DataFrame or as a JSON: it contains information about the aggregated exposure, the mean losses and the quantile losses for each aggregation tag, as documented in https://docs.openquake.org/oq-engine/master/manual/api-reference/rest-api.html#get-v1-calc-calc-id-aggrisk-tags .

This output is still experimental and may change in the future.

OQ-Impact Assessment platform#

The old project Aristotle (https://www.globalquakemodel.org/proj/aristotle) has been subsumed into a new project called OQ-Impact which has all of its features and some more.

The kind of features available depends on the user, with users of level 2 - currently restricted to GEM personnel - having access to everything, including the ability to upload custom ruptures and perform scenario calculations. Users of level 1 can only run scenarios starting from a ShakeMap ID with a much simplified UI while users of level 0 can only see the results of scenarios shared by GEM staff.

We renamed everything which was user-visible, like the project name displayed in the WebUI and the project name used in email notifications. Moreover we renamed some templates and some of the code.

We changed the authentication logic so that when the PAM authentication backend is used we do not need to actualize the email notification templates anymore.

We improved the logic for user registration and the command createnormaluser has been extended to accept the user level as a parameter.

We improved the visualization of the losses table and we added the ability to visualize the aggrisk_tags output.

We now visualize the uploaded rupture correctly in all cases.

We fixed a minor bug with the timestamp in ShakeMaps.

We removed the ‘Continue’ button which made no sense in OQ-Impact mode.

We changed OQ-Impact calculations to use aggregate_by = ID_1;OCCUPANCY and quantiles = 0.05 0.95.

Finally, now we give the user feedback through the WebUI if the uploaded rupture XML is malformed.

Bug fixes and other#

There was a long standing bug in the ContextMaker causing ruptures with magnitude exactly equal to the minimum magnitude to be incorrectly discarded. It has been fixed now. Fortunately the impact on the hazard curves is minimal.

There was a bug breaking the avg_losses-rlzs exporter due to the fact that the full asset collection was stored instead of the reduced asset collection. It has been fixed now.

In scenario calculations it is possible to specify the gsim directly as a string, however there was a bug when using the full TOML syntax and not simply the GMPE name. It has been fixed now.

Evi Riga reported a bug in classical_damage calculations with sampling, causing a numpy broadcast error. This bug has been fixed.

File-dependent GMPEs store the associated files in the datastore so that if the calculation HDF5 file is moved into a different machine, post-processing scripts can run there. However, due to a bug, the GMPEs could not be instantiated in the postprocessing machine. It has been fixed now.

The weights stored in the source_info table were incorrect in the case of multiple sources with the same source ID. While not having an impact on the final user, it was annoying and it has been fixed.

There were some inconsequential “division by zero” warnings raised internally by Shapely that have been suppressed.

We added an optional parameter minimum_engine_version in the job.ini file, which can be used to specify the minimum engine version needed to run the calculation.