diff --git a/openquake/cat/hmg/hmg.py b/openquake/cat/hmg/hmg.py
index 12d39bb36..9238e1dbc 100644
--- a/openquake/cat/hmg/hmg.py
+++ b/openquake/cat/hmg/hmg.py
@@ -126,19 +126,18 @@ def process_magnitude_keep_all(work, mag_rules, msig=0.2):
flag = rows["eventID"].duplicated(keep='first')
if any(flag):
- # this line is so the larger M is taken - expiremental based on MEX issue
- rows = rows.sort_values("value", ascending=False).drop_duplicates('eventID').sort_index()
- #tmp = sorted_rows[~flag].copy()
- #rows = tmp
+ # this line is so the larger M is taken - expiremental based
+ # on MEX issue
+ rows = rows.sort_values(
+ "value", ascending=False).drop_duplicates('eventID').sort_index()
# Magnitude conversion
if len(rows) > 0:
low_mags = mag_rules[agency][mag_type]['low_mags']
conv_eqs = mag_rules[agency][mag_type]['conv_eqs']
conv_sigma = mag_rules[agency][mag_type]['sigma']
- save = apply_mag_conversion_rule_keep_all(low_mags, conv_eqs,
- conv_sigma,
- rows, save)
+ save = apply_mag_conversion_rule_keep_all(
+ low_mags, conv_eqs, conv_sigma, rows, save)
print(")")
return save
@@ -190,7 +189,7 @@ def apply_mag_conversion_rule(low_mags, conv_eqs, conv_sigs, rows, save, work, m
m_inds = m >= mlow
if conversion == 'm':
tmp[m_inds] = m[m_inds]
- tmpsig[m_inds] = sig[m_inds]
+ tmpsig[m_inds] = sig[m_inds]
else:
tmpstr = re.sub('m', fmt2.format(mlow), conversion)
tmpstrP = re.sub('m', '(' + fmt2.format(mlow)+'+ 0.001)', conversion)
@@ -203,7 +202,7 @@ def apply_mag_conversion_rule(low_mags, conv_eqs, conv_sigs, rows, save, work, m
exec(cmd)
exec(cmdsp)
exec(cmdsm)
- deriv = [(ta-tb)/0.002 for ta, tb in zip(tmpsiga, tmpsigb)]
+ deriv = [(ta-tb)/0.002 for ta, tb in zip(tmpsiga, tmpsigb)]
sig_new = np.array([np.sqrt(s**2 + d**2 * sigma**2) for s, d in zip(sig, deriv)])
tmpsig[m_inds] = sig_new[m_inds]
@@ -304,11 +303,15 @@ def process_origin(odf, ori_rules):
def process_magnitude(work, mag_rules, msig=0.2):
"""
+ This function applies the magnitude conversion rules
+
:param work:
A :class:`pandas.DataFrame` instance obtained by joining the origin
and magnitude dataframes
:param mag_rules:
A dictionary with the rules to be used for processing the catalogue
+ :param msig:
+ Standard deviation of magnitude.
:return:
Two :class:`pandas.DataFrame` instances. The first one with the
homogenised catalogue, the second one with the information not
@@ -354,16 +357,18 @@ def process_magnitude(work, mag_rules, msig=0.2):
# Magnitude conversion
if len(rows) > 0:
+
low_mags = mag_rules[agency][mag_type]['low_mags']
conv_eqs = mag_rules[agency][mag_type]['conv_eqs']
conv_sigma = mag_rules[agency][mag_type]['sigma']
+
if 'mag_sigma' in mag_rules[agency][mag_type]:
m_sigma = mag_rules[agency][mag_type]['mag_sigma']
else:
m_sigma = msig
- save, work = apply_mag_conversion_rule(low_mags, conv_eqs,
- conv_sigma, rows,
- save, work, m_sigma)
+
+ save, work = apply_mag_conversion_rule(
+ low_mags, conv_eqs, conv_sigma, rows, save, work, m_sigma)
print(")")
return save, work
@@ -383,38 +388,50 @@ def process_dfs(odf_fname, mdf_fname, settings_fname=None):
save = None
work = None
- # Reading settings
+ # Reading settings. These include the priority agencies for the origin and
+ # the rules for magnitude conversion.
rules = toml.load(settings_fname)
+ mag_n_sigma = 0.0
+ if 'default' in rules.keys():
+ mag_n_sigma = rules['default'].get('mag_sigma', mag_n_sigma)
+ else:
+ rules['default'] = {'mag_sigma': mag_n_sigma}
+
+ for agency in rules['magnitude'].keys():
+ for mag_type in rules['magnitude'][agency].keys():
+ if 'sigma' not in rules['magnitude'][agency][mag_type].keys():
+ n_mags = len(rules['magnitude'][agency][mag_type]['low_mags'])
+ tmp = [mag_n_sigma for i in range(n_mags)]
+ rules['magnitude'][agency][mag_type]['sigma'] = tmp
+
# Checking input
- if not('origin' in rules.keys() or 'magnitude' in rules.keys()):
+ if not ('origin' in rules.keys() or 'magnitude' in rules.keys()):
raise ValueError('At least one set of settings must be defined')
# These are the tables with origins and magnitudes
odf = pd.read_hdf(odf_fname)
mdf = pd.read_hdf(mdf_fname)
-
print("Number of EventIDs {:d}\n".format(len(odf["eventID"].unique())))
# Processing origins
if 'origin' in rules.keys():
print('Selecting origins')
odf = process_origin(odf, rules['origin'])
-
print("Number of origins selected {:d}\n".format(len(odf)))
- if 'default' in rules.keys():
- mag_n_sigma = rules['default']['mag_sigma']
-
# Processing magnitudes
if 'magnitude' in rules.keys():
print('Homogenising magnitudes')
+
# Creating a single dataframe by joining
work = pd.merge(odf, mdf, on=["eventID"])
- save, work = process_magnitude(work, rules['magnitude'], msig=mag_n_sigma)
+ save, work = process_magnitude(
+ work, rules['magnitude'], msig=mag_n_sigma)
work_all_m = pd.merge(odf, mdf, on=["eventID"])
- save_all_m = process_magnitude_keep_all(work_all_m, rules['magnitude'],msig=mag_n_sigma)
+ save_all_m = process_magnitude_keep_all(
+ work_all_m, rules['magnitude'], msig=mag_n_sigma)
print("Number of origins with final mag type {:d}\n".format(len(save)))
diff --git a/openquake/cat/hmg/merge.py b/openquake/cat/hmg/merge.py
index cf8cd50d7..77130bea8 100644
--- a/openquake/cat/hmg/merge.py
+++ b/openquake/cat/hmg/merge.py
@@ -165,8 +165,8 @@ def load_catalogue(fname: str, cat_type: str, cat_code: str, cat_name: str):
cat = parser.parse(cat_code, cat_name)
else:
raise ValueError("Unsupported catalogue type")
- fmt = ' The original catalogue contains {:d} events'
- print(fmt.format(len(cat.events)))
+ print(f' The original catalogue contains {len(cat.events):d} events')
+
return cat
@@ -199,7 +199,7 @@ def process_catalogues(settings_fname: str) -> None:
# Process the catalogue. `tdict` is dictionary with the info
# required to merge one specific catalogue.
for icat, tdict in enumerate(settings["catalogues"]):
-
+
# Get settings
fname = os.path.join(path, tdict["filename"])
cat_type = tdict["type"]
@@ -215,6 +215,9 @@ def process_catalogues(settings_fname: str) -> None:
nev = catroot.get_number_events()
print(f" Catalogue contains: {nev:d} events")
+ if nev == 0:
+ raise ValueError(f'Empty catalogue in {fname}')
+
select_flag = tdict.get("select_region", False)
if select_flag:
msg = "Selecting earthquakes within the region shapefile"
@@ -292,11 +295,11 @@ def process_catalogues(settings_fname: str) -> None:
else:
fle = tempfile.NamedTemporaryFile(mode = 'w', delete=False)
logfle=fle.name
-
+
else:
logfle = tdict["log_file"]
-
+
print(f" Log file: {logfle:s}".format())
# Perform the merge
meth = catroot.add_external_idf_formatted_catalogue
@@ -306,7 +309,7 @@ def process_catalogues(settings_fname: str) -> None:
# Update the spatial index
print(" Updating index")
catroot._create_spatial_index()
-
+
nev = catroot.get_number_events()
print(f" Whole catalogue contains: {nev:d} events")
diff --git a/openquake/cat/parsers/generic_catalogue.py b/openquake/cat/parsers/generic_catalogue.py
old mode 100755
new mode 100644
index 3cdeb1843..17ebfbb85
--- a/openquake/cat/parsers/generic_catalogue.py
+++ b/openquake/cat/parsers/generic_catalogue.py
@@ -49,7 +49,8 @@ class GeneralCsvCatalogue(object):
'SemiMajor90', 'SemiMinor90', 'ErrorStrike',
'depth', 'depthError', 'magnitude',
'sigmaMagnitude', 'moment', 'mpp', 'mpr', 'mrr',
- 'mrt', 'mtp', 'mtt', 'dip1', 'str1', 'rake1', 'dip2', 'str2', 'rake2']
+ 'mrt', 'mtp', 'mtt', 'dip1', 'str1', 'rake1',
+ 'dip2', 'str2', 'rake2']
INT_ATTRIBUTE_LIST = ['year', 'month', 'day', 'hour', 'minute',
'flag', 'scaling']
@@ -59,8 +60,7 @@ class GeneralCsvCatalogue(object):
TOTAL_ATTRIBUTE_LIST = list(
(set(FLOAT_ATTRIBUTE_LIST).union(
- set(INT_ATTRIBUTE_LIST))).union(
- set(STRING_ATTRIBUTE_LIST)))
+ set(INT_ATTRIBUTE_LIST))).union(set(STRING_ATTRIBUTE_LIST)))
def __init__(self):
"""
@@ -89,7 +89,6 @@ def parse_csv(self, filename):
# Replace any whitespace with nan
df.replace(r'^\s*$', np.nan, regex=True)
-
# Checking information included in the original
if 'day' in df.columns:
# Fixing day
@@ -101,30 +100,31 @@ def parse_csv(self, filename):
df.drop(df[df.minute > 59.599999].index, inplace=True)
if 'hour' in df.columns:
df.drop(df[df.hour > 23.99999].index, inplace=True)
-
+
if 'str1' in df.columns:
df['str1'] = pd.to_numeric(df['str1'], errors='coerce')
-
+
if 'dip1' in df.columns:
df['dip1'] = pd.to_numeric(df['dip1'], errors='coerce')
-
+
if 'rake1' in df.columns:
df['rake1'] = pd.to_numeric(df['rake1'], errors='coerce')
-
+
if 'str2' in df.columns:
df['str2'] = pd.to_numeric(df['str2'], errors='coerce')
-
+
if 'dip2' in df.columns:
df['dip2'] = pd.to_numeric(df['dip2'], errors='coerce')
-
+
if 'rake2' in df.columns:
df['rake2'] = pd.to_numeric(df['rake2'], errors='coerce')
-
+
if 'SemiMinor90' in df.columns:
- df['SemiMinor90']= pd.to_numeric(df['SemiMinor90'], errors='coerce')
-
+ df['SemiMinor90']= pd.to_numeric(df['SemiMinor90'], errors='coerce')
+
if 'SemiMajor90' in df.columns:
- df['SemiMajor90']= pd.to_numeric(df['SemiMajor90'], errors='coerce')
+ df['SemiMajor90']= pd.to_numeric(df['SemiMajor90'], errors='coerce')
+
# Processing columns and updating the catalogue
for col in df.columns:
if col in self.TOTAL_ATTRIBUTE_LIST:
@@ -134,7 +134,7 @@ def parse_csv(self, filename):
else:
self.data[col] = df[col].to_list()
-
+
def get_number_events(self):
"""
Returns the number of events
@@ -227,12 +227,15 @@ def write_to_isf_catalogue(self, catalogue_id, name):
isf_cat = ISFCatalogue(catalogue_id, name)
for iloc in range(0, self.get_number_events()):
+
# Origin ID
if len(self.data['eventID']) > 0:
event_id = str(self.data['eventID'][iloc])
else:
- raise ValueError('Unknown key. Line: {:d}'.format(iloc))
+ msg = 'Event ID column is empty'
+ raise ValueError(msg)
origin_id = event_id
+
# Create Magnitude
sigma_mag = None
if ('sigmaMagnitude' in self.data and
@@ -436,7 +439,7 @@ def write_to_isf_catalogue(self, catalogue_id, name):
semiminor90,
error_strike,
depth_error)
-
+
# Create Origin
# Date
eq_date = datetime.date(self.data['year'][iloc],
diff --git a/openquake/cat/parsers/isf_catalogue_reader.py b/openquake/cat/parsers/isf_catalogue_reader.py
old mode 100755
new mode 100644
index ecfdda3b7..dbcf62022
--- a/openquake/cat/parsers/isf_catalogue_reader.py
+++ b/openquake/cat/parsers/isf_catalogue_reader.py
@@ -206,7 +206,9 @@ def read_file(self, identifier, name):
is_origin = False
is_magnitude = False
comment_str = ""
+
for row in f.readlines():
+
# Strip newline carriage
if row.endswith("\r\n"):
# If the file was compiled on windows machines
@@ -273,7 +275,9 @@ def read_file(self, identifier, name):
else:
pass
- if is_magnitude and len(row) == 38:
+ rsplt = re.split('\\s+', row)
+
+ if is_magnitude and len(rsplt) == 4:
# Is a magnitude row
mag = get_event_magnitude(row,
event.id,
@@ -283,14 +287,17 @@ def read_file(self, identifier, name):
magnitudes.append(mag)
continue
- if is_origin and len(row) == 136:
+ chk = re.search('^\\d{4}/\\d{2}/\\d{2}', rsplt[0])
+ if is_origin and chk:
# Is an origin row
orig = get_event_origin_row(row,
self.selected_origin_agencies)
if orig:
origins.append(orig)
+
if event is not None:
self._build_event(event, origins, magnitudes, comment_str)
+
if len(self.rejected_catalogue):
# Turn list of rejected events into its own instance of
# ISFCatalogue
@@ -299,7 +306,9 @@ def read_file(self, identifier, name):
name + " - Rejected",
events=self.rejected_catalogue)
f.close()
+
self.catalogue.ids = [e.id for e in self.catalogue.events]
+
return self.catalogue
def _build_event(self, event, origins, magnitudes, comment_str):
diff --git a/openquake/mbi/sub/create_ruptures.py b/openquake/mbi/sub/create_ruptures.py
index 8d2c12cc7..55b6f95d0 100755
--- a/openquake/mbi/sub/create_ruptures.py
+++ b/openquake/mbi/sub/create_ruptures.py
@@ -9,6 +9,9 @@
def main(config_fname: str, only_plt: bool = False):
+ """
+ Creates inslab ruptures
+ """
# Parsing config
model = toml.load(config_fname)
@@ -24,7 +27,7 @@ def main(config_fname: str, only_plt: bool = False):
calculate_ruptures(ini_fname, ref_fdr=ref_fdr, agr=agr, bgr=bgr,
mmin=mmin, mmax=mmax)
-descr = 'The path to the .ini file containing info to build the ruptures'
+descr = 'The path to the .toml file containing info to build the ruptures'
main.config_fname = descr
if __name__ == '__main__':
diff --git a/openquake/sub/misc/utils.py b/openquake/sub/misc/utils.py
index 8a95a0ba8..a8a595cc7 100644
--- a/openquake/sub/misc/utils.py
+++ b/openquake/sub/misc/utils.py
@@ -1,3 +1,29 @@
+# ------------------- The OpenQuake Model Building Toolkit --------------------
+# Copyright (C) 2024 GEM Foundation
+# _______ _______ __ __ _______ _______ ___ _
+# | || | | |_| || _ || || | | |
+# | _ || _ | ____ | || |_| ||_ _|| |_| |
+# | | | || | | ||____|| || | | | | _|
+# | |_| || |_| | | || _ | | | | |_
+# | || | | ||_|| || |_| | | | | _ |
+# |_______||____||_| |_| |_||_______| |___| |___| |_|
+#
+# This program is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Affero General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+# -----------------------------------------------------------------------------
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+# coding: utf-8
+
"""
:module:`openquake.sub.misc.utils`
"""
@@ -11,6 +37,8 @@
def get_centroids(lons, lats, deps):
"""
+ Computes the centroids of all the ruptures admitted by the fault described
+ by the coordinates in the three input arrays.
"""
cen = np.zeros((lons.shape[0] - 1, lons.shape[1] - 1, 3))
cen[:, :, :] = np.nan
@@ -31,7 +59,7 @@ def get_centroids(lons, lats, deps):
x = (lons[i + 1, j] + lons[i, j + 1]) / 2
y = (lats[i + 1, j] + lats[i, j + 1]) / 2
z = (deps[i + 1, j] + deps[i, j + 1]) / 2
- #
+
# Save the centroid
cen[i, j, 0] = x
cen[i, j, 1] = y
diff --git a/openquake/sub/slab/rupture.py b/openquake/sub/slab/rupture.py
old mode 100755
new mode 100644
index 42805cad0..9aaa4b486
--- a/openquake/sub/slab/rupture.py
+++ b/openquake/sub/slab/rupture.py
@@ -1,4 +1,28 @@
#!/usr/bin/env python
+# ------------------- The OpenQuake Model Building Toolkit --------------------
+# Copyright (C) 2024 GEM Foundation
+# _______ _______ __ __ _______ _______ ___ _
+# | || | | |_| || _ || || | | |
+# | _ || _ | ____ | || |_| ||_ _|| |_| |
+# | | | || | | ||____|| || | | | | _|
+# | |_| || |_| | | || _ | | | | |_
+# | || | | ||_|| || |_| | | | | _ |
+# |_______||____||_| |_| |_||_______| |___| |___| |_|
+#
+# This program is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Affero General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+# -----------------------------------------------------------------------------
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
# coding: utf-8
"""
@@ -9,20 +33,19 @@
import re
import h5py
import numpy as np
-# import pandas as pd
import rtree
import logging
import configparser
+import pathlib
import matplotlib.pyplot as plt
-# from mpl_toolkits.mplot3d import Axes3D
+from pyproj import Proj
# from mayavi import mlab
-from pyproj import Proj
# from openquake.sub.plotting.tools import plot_mesh
# from openquake.sub.plotting.tools import plot_mesh_mayavi
-from openquake.sub.misc.edge import create_from_profiles
+from openquake.hazardlib.geo.surface.kite_fault import KiteSurface
from openquake.sub.quad.msh import create_lower_surface_mesh
from openquake.sub.grid3d import Grid3d
from openquake.sub.misc.profile import _read_profiles
@@ -42,8 +65,7 @@
from openquake.man.checks.catalogue import load_catalogue
from openquake.wkf.utils import create_folder
-PLOTTING = True
-# PLOTTING = False
+PLOTTING = False
def get_catalogue(cat_pickle_fname, treg_filename=None, label='',
@@ -53,19 +75,19 @@ def get_catalogue(cat_pickle_fname, treg_filename=None, label='',
:param treg_filename:
:param label:
"""
- #
- # loading TR
+
+ # Load TR
if treg_filename is not None:
f = h5py.File(treg_filename, 'r')
tr = f[label][:]
f.close()
- #
- # loading the catalogue
+
+ # Load the catalogue
catalogue = load_catalogue(cat_pickle_fname)
if sort_cat is True:
catalogue.sort_catalogue_chronologically()
- #
- # if a label and a TR are provided we filter the catalogue
+
+ # If a label and a TR are provided we filter the catalogue
if treg_filename is not None:
selector = CatalogueSelector(catalogue, create_copy=False)
catalogue = selector.select_catalogue(tr)
@@ -157,16 +179,16 @@ def _generator(mesh, p):
def create_ruptures(mfd, dips, sampling, msr, asprs, float_strike, float_dip,
r, values, oms, tspan, hdf5_filename, uniform_fraction,
- proj, idl, align=False, inslab=False):
+ proj, idl, align=False):
"""
- Create inslab ruptures using an MFD, a time span. The dictionary 'oms'
+ Create inslab ruptures using an MFD and a time span. The dictionary 'oms'
contains lists of profiles for various values of dip. The ruptures are
floated on each virtual fault created from a set of profiles.
:param mfd:
A magnitude frequency distribution
:param dips:
- A set of dip values used to create the virtual faults withni the slab.
+ A set of dip values used to create the virtual faults within the slab.
:param sampling:
The distance in km used to sample the profiles
:param msr:
@@ -198,43 +220,63 @@ def create_ruptures(mfd, dips, sampling, msr, asprs, float_strike, float_dip,
Profile alignment flag
"""
+ # This contains (mag, depth) tuples indicating the depth below which
+ # magnitudes lower than the threshold will be represented as a finite
+ # rupture
+ mag_dep_filter = np.array(
+ [[6.0, 50.0],
+ [7.0, 100.0]]
+ )
+
# Create the output hdf5 file
fh5 = h5py.File(hdf5_filename, 'a')
grp_inslab = fh5.create_group('inslab')
- # Loop over dip angles, top traces on the top the slab surface and
+ # Loop over dip angles, traces on the top the slab surface and
# magnitudes. The traces are used to create the virtual faults and
# float the ruptures.
allrup = {}
iscnt = 0
trup = 0
for dip in dips:
+ # Lines is a list of lines
for mi, lines in enumerate(oms[dip]):
- print('\nVirtual fault {:d} dip {:.2f}\n'.format(mi, dip))
+ logging.info(f'Virtual fault {mi} dip {dip:.2f}\n')
- # Filter out small surfaces i.e. surfaces defined by less than
- # three profiles
+ # Filter out small virtual fault surfaces i.e. surfaces defined
+ # by less than three profiles
if len(lines) < 3:
continue
- # Checking initial profiles
+ # Check initial profiles
+ min_de = 1e10
+ max_de = -1e10
for lne in lines:
ps = np.array([[p.longitude, p.latitude, p.depth] for p in
lne.points])
+ min_de = np.min([min_de, np.min(ps[:, 2])])
+ max_de = np.max([max_de, np.max(ps[:, 2])])
assert not np.any(np.isnan(ps))
# Create in-slab virtual fault - `lines` is the list of profiles
# to be used for the construction of the virtual fault surface
- smsh = create_from_profiles(lines, sampling, sampling, idl, align)
-
- # Create mesh
- omsh = Mesh(smsh[:, :, 0], smsh[:, :, 1], smsh[:, :, 2])
-
- # Store data in the hdf5 file
+ # 'smsh'
+ ks = KiteSurface.from_profiles(
+ lines, sampling, sampling, idl, align)
+
+ # TODO This can probably be refactored since smsh is required only
+ # when storing
+ smsh = np.empty((ks.mesh.lons.shape[0], ks.mesh.lons.shape[1], 3))
+ smsh[..., 0] = ks.mesh.lons
+ smsh[..., 1] = ks.mesh.lats
+ smsh[..., 2] = ks.mesh.depths
+
+ # Store data describing the geometry of the virtual fault into the
+ # hdf5 file
grp_inslab.create_dataset('{:09d}'.format(iscnt), data=smsh)
- # Get centroids for a given virtual fault surface
+ # Get centroids of ruptures occurring on the virtual fault surface
ccc = get_centroids(smsh[:, :, 0], smsh[:, :, 1], smsh[:, :, 2])
# Get weights - this assigns to each centroid the weight of
@@ -244,7 +286,14 @@ def create_ruptures(mfd, dips, sampling, msr, asprs, float_strike, float_dip,
# Loop over magnitudes
for mag, _ in mfd.get_annual_occurrence_rates():
- # TODO this is assigns arbitrarly a rake of 90 degrees. It
+ # Here we decide if earthquakes with magnitude 'mag' must be
+ # represented either as a finite or a point rupture
+ as_point = False
+ idx = np.argmax(mag < mag_dep_filter[:, 0])
+ if min_de < mag_dep_filter[idx, 1]:
+ as_point = True
+
+ # TODO this assigns arbitrarly a rake of 90 degrees. It
# should be a configuration parameter
area = msr.get_median_area(mag=mag, rake=90)
rups = []
@@ -259,16 +308,15 @@ def create_ruptures(mfd, dips, sampling, msr, asprs, float_strike, float_dip,
# sampling
if (lng is None or wdt is None or
lng < 1e-10 or wdt < 1e-10):
- msg = 'Ruptures for magnitude {:.2f} and ar {:.2f}'
- msg = msg.format(mag, aspr)
- msg = ' {:s} will not be defined'.format(msg)
+ msg = f'Ruptures for mag {mag:.2f} and ar {aspr:.2f}'
+ msg = f'{msg} will not be defined'
logging.warning(msg)
continue
# Rupture lenght and rupture width as multiples of the
# mesh sampling distance
- rup_len = int(lng/sampling) + 1
- rup_wid = int(wdt/sampling) + 1
+ rup_len = int(lng / sampling) + 1
+ rup_wid = int(wdt / sampling) + 1
# Skip small ruptures
if rup_len < 2 or rup_wid < 2:
@@ -276,19 +324,25 @@ def create_ruptures(mfd, dips, sampling, msr, asprs, float_strike, float_dip,
logging.warning(msg)
continue
- # Get Ruptures
+ # Get Ruptures. f_strike and f_dip are the floating
+ # parameters along strike and dip. 'rup_len' and 'rup_wid'
+ # are in terms of number of cells
counter = 0
- for rup, rl, cl in get_ruptures(omsh, rup_len, rup_wid,
+ for rup, rl, cl in get_ruptures(ks.mesh, rup_len, rup_wid,
f_strike=float_strike,
f_dip=float_dip):
- # Get weights
+ # Get the weight for this rupture from the smoothing
wsum = asprs[aspr]
wsum_smoo = np.nan
+
if uniform_fraction < 0.99:
- w = weights[rl:rl+rup_wid-1, cl:cl+rup_len-1]
+ w = weights[rl:rl + rup_wid - 1,
+ cl:cl + rup_len - 1]
i = np.isfinite(w)
- tmpw = sum(w[i])
+ # Weight normalized by the number of points
+ # composing the mesh
+ tmpw = sum(w[i]) / len(i)
wsum_smoo = tmpw * asprs[aspr]
# Fix the longitudes outside the standard [-180, 180]
@@ -299,8 +353,8 @@ def create_ruptures(mfd, dips, sampling, msr, asprs, float_strike, float_dip,
rup[0][ik] -= 360
# Get centroid
- idx_r = np.floor(rup[0].shape[0]/2).astype('i4')
- idx_c = np.floor(rup[0].shape[1]/2).astype('i4')
+ idx_r = np.floor(rup[0].shape[0] / 2).astype('i4')
+ idx_c = np.floor(rup[0].shape[1] / 2).astype('i4')
hypo = [rup[0][idx_r, idx_c],
rup[1][idx_r, idx_c],
rup[2][idx_r, idx_c]]
@@ -315,16 +369,18 @@ def create_ruptures(mfd, dips, sampling, msr, asprs, float_strike, float_dip,
rz = rup[2][ij].flatten()
# Create the gridded surface. We need at least four
- # vertexes
+ # vertexes.
if len(rx) > 3:
srfc = GriddedSurface(Mesh.from_coords(zip(rx,
ry,
rz),
sort=False))
- # Update the list with the ruptures - the last
- # element in the list is the container for the
- # probability of occurrence. For the time being
- # this is not defined
+ # Update the list with the ruptures - the
+ # second-last element in the list is the container
+ # for the probability of occurrence. For the time
+ # being this is not defined. 'wsum' is the weight
+ # for the current aspect ratio, 'wsum_smoo' is the
+ # weight from the smoothing
rups.append([srfc, wsum, wsum_smoo, dip, aspr,
[], hypo])
counter += 1
@@ -397,11 +453,11 @@ def create_ruptures(mfd, dips, sampling, msr, asprs, float_strike, float_dip,
chk += wei
if uniform_fraction < 0.99:
weis = weis / tweis[lab]
- ocr += (occr * (1.-uniform_fraction)) * weis
+ ocr += (occr * (1. - uniform_fraction)) * weis
chks += weis
# Compute the probabilities
- p0 = np.exp(-ocr*tspan)
+ p0 = np.exp(-ocr * tspan)
p1 = 1. - p0
# Append ruptures
@@ -469,13 +525,16 @@ def dict_of_floats_from_string(istr):
return out
-def calculate_ruptures(ini_fname, only_plt=False, ref_fdr=None, agr=None,
- bgr=None, mmin=None, mmax=None):
+# def calculate_ruptures(ini_fname, only_plt=False, ref_fdr=None, agr=None,
+# bgr=None, mmin=None, mmax=None, **kwargs):
+def calculate_ruptures(ini_fname, **kwargs):
"""
+ Using the information in a configuration file,
+
:param str ini_fname:
The name of a .ini file
:param only_plt:
- Boolean. When true only it only plots ruptures
+ Boolean. When true only plots ruptures
:param ref_fdr:
The path to the reference folder used to set the paths in the .ini
file. If not provided directly, we use the one set in the .ini file.
@@ -489,17 +548,18 @@ def calculate_ruptures(ini_fname, only_plt=False, ref_fdr=None, agr=None,
logging.basicConfig(format='rupture:%(levelname)s:%(message)s')
# Reference folder
- if ref_fdr is None:
- if 'reference_folder' not in config['main']:
- msg = 'The .ini file does not contain the reference_folder param'
- raise ValueError(msg)
+ if 'reference_folder' in kwargs:
+ ref_fdr = kwargs.get('reference_folder')
+ elif 'reference_folder' in config['main']:
ref_fdr = config.get('main', 'reference_folder')
+ else:
+ ref_fdr = pathlib.Path(ini_fname).parent
# Set parameters
profile_sd_topsl = config.getfloat('main', 'profile_sd_topsl')
edge_sd_topsl = config.getfloat('main', 'edge_sd_topsl')
- # This sampling distance is used to
+ # Load parameters from the config file
sampling = config.getfloat('main', 'sampling')
float_strike = config.getfloat('main', 'float_strike')
float_dip = config.getfloat('main', 'float_dip')
@@ -510,20 +570,13 @@ def calculate_ruptures(ini_fname, only_plt=False, ref_fdr=None, agr=None,
uniform_fraction = config.getfloat('main', 'uniform_fraction')
# MFD params
- if agr is None:
- agr = config.getfloat('main', 'agr')
- if bgr is None:
- bgr = config.getfloat('main', 'bgr')
- if mmax is None:
- mmax = config.getfloat('main', 'mmax')
- if mmin is None:
- mmin = config.getfloat('main', 'mmin')
+ agr = kwargs.get('agr', config.getfloat('main', 'agr'))
+ bgr = kwargs.get('bgr', config.getfloat('main', 'bgr'))
+ mmax = kwargs.get('mmax', config.getfloat('main', 'mmax'))
+ mmin = kwargs.get('mmin', config.getfloat('main', 'mmin'))
# IDL
- if config.has_option('main', 'idl'):
- idl = config.get('main', 'idl')
- else:
- idl = False
+ idl = kwargs.get('idl', config.getboolean('main', 'idl', fallback=False))
# Profile alignment at the top
align = False
@@ -533,7 +586,7 @@ def calculate_ruptures(ini_fname, only_plt=False, ref_fdr=None, agr=None,
align = True
# Set profile folder
- path = config.get('main', 'profile_folder')
+ path = kwargs.get('profile_folder', config.get('main', 'profile_folder'))
path = os.path.abspath(os.path.join(ref_fdr, path))
# Catalogue
@@ -541,17 +594,22 @@ def calculate_ruptures(ini_fname, only_plt=False, ref_fdr=None, agr=None,
cat_pickle_fname = os.path.abspath(os.path.join(ref_fdr, cat_pickle_fname))
try:
sort_cat = bool(config.get('main', 'sort_catalogue'))
- except Exception:
+ except:
sort_cat = False
# Output
- hdf5_filename = config.get('main', 'out_hdf5_fname')
+ hdf5_filename = kwargs.get('out_hdf5_fname',
+ config.get('main', 'out_hdf5_fname'))
hdf5_filename = os.path.abspath(os.path.join(ref_fdr, hdf5_filename))
# Smoothing output
- out_hdf5_smoothing_fname = config.get('main', 'out_hdf5_smoothing_fname')
+ key = 'out_hdf5_smoothing_fname'
+ out_hdf5_smoothing_fname = kwargs.get(key, config.get('main', key))
tmps = os.path.join(ref_fdr, out_hdf5_smoothing_fname)
out_hdf5_smoothing_fname = os.path.abspath(tmps)
+
+ # Create the smoothing directory if it doesn't exist
+ smoothing_dir = '/'.join(out_hdf5_smoothing_fname.split('/')[:-1])
# create the smoothing directory if it doesn't exist
smoothing_dir = os.path.sep.join(
out_hdf5_smoothing_fname.split(os.path.sep)[:-1])
@@ -583,45 +641,50 @@ def calculate_ruptures(ini_fname, only_plt=False, ref_fdr=None, agr=None,
# Create mesh from profiles
logging.info('Creating top of slab mesh')
- print('Creating top of slab mesh')
- msh = create_from_profiles(profiles, profile_sd_topsl, edge_sd_topsl, idl)
+ mks = KiteSurface.from_profiles(
+ profiles, profile_sd_topsl, edge_sd_topsl, idl)
+
+ # TODO This can probably be refactored since smsh is required only
+ # when storing
+ msh = np.empty((mks.mesh.lons.shape[0], mks.mesh.lons.shape[1], 3))
+ msh[..., 0] = mks.mesh.lons
+ msh[..., 1] = mks.mesh.lats
+ msh[..., 2] = mks.mesh.depths
# Create inslab meshes. The output (i.e ohs) is a dictionary with the
# values of dip as keys. The values in the dictionary
# are :class:`openquake.hazardlib.geo.line.Line` instances
logging.info('Creating ruptures on virtual faults')
- print('Creating ruptures on virtual faults')
ohs = create_inslab_meshes(msh, dips, slab_thickness, sampling)
- # if only_plt:
- # pass
if False:
- # TODO consider replacing wiith pyvista
+ from mayavi import mlab
+ # TODO consider replacing with pyvista
azim = 10.
elev = 20.
dist = 20.
f = mlab.figure(bgcolor=(1, 1, 1), size=(900, 600))
vsc = -0.01
- #
- # profiles
+
+ # Profiles
for ipro, (pro, fnme) in enumerate(zip(profiles, pro_fnames)):
tmp = [[p.longitude, p.latitude, p.depth] for p in pro.points]
tmp = np.array(tmp)
tmp[tmp[:, 0] < 0, 0] = tmp[tmp[:, 0] < 0, 0] + 360
- mlab.plot3d(tmp[:, 0], tmp[:, 1], tmp[:, 2]*vsc, color=(1, 0, 0))
- #
- # top of the slab mesh
- plot_mesh_mayavi(msh, vsc, color=(0, 1, 0))
- #
+ mlab.plot3d(tmp[:, 0], tmp[:, 1], tmp[:, 2] * vsc, color=(1, 0, 0))
+
+ # Top of the slab mesh
+ # plot_mesh_mayavi(msh, vsc, color=(0, 1, 0))
+
for key in ohs:
for iii in range(len(ohs[key])):
for line in ohs[key][iii]:
pnt = np.array([[p.longitude, p.latitude, p.depth]
for p in line.points])
pnt[pnt[:, 0] < 0, 0] = pnt[pnt[:, 0] < 0, 0] + 360
- mlab.plot3d(pnt[:, 0], pnt[:, 1], pnt[:, 2]*vsc,
+ mlab.plot3d(pnt[:, 0], pnt[:, 1], pnt[:, 2] * vsc,
color=(0, 0, 1))
f.scene.camera.azimuth(azim)
@@ -629,7 +692,6 @@ def calculate_ruptures(ini_fname, only_plt=False, ref_fdr=None, agr=None,
mlab.view(distance=dist)
mlab.show()
mlab.show()
-
exit(0)
if PLOTTING:
@@ -642,9 +704,9 @@ def calculate_ruptures(ini_fname, only_plt=False, ref_fdr=None, agr=None,
tmp = [[p.longitude, p.latitude, p.depth] for p in pro.points]
tmp = np.array(tmp)
tmp[tmp[:, 0] < 0, 0] = tmp[tmp[:, 0] < 0, 0] + 360
- ax.plot(tmp[:, 0], tmp[:, 1], tmp[:, 2]*vsc, 'x--b', markersize=2)
+ ax.plot(tmp[:, 0], tmp[:, 1], tmp[:, 2] * vsc, 'x--b', ms=2)
tmps = '{:d}-{:s}'.format(ipro, os.path.basename(fnme))
- ax.text(tmp[0, 0], tmp[0, 1], tmp[0, 2]*vsc, tmps)
+ ax.text(tmp[0, 0], tmp[0, 1], tmp[0, 2] * vsc, tmps)
# Top of the slab mesh
# plot_mesh(ax, msh, vsc)
@@ -666,26 +728,29 @@ def calculate_ruptures(ini_fname, only_plt=False, ref_fdr=None, agr=None,
# Get min and max values of the mesh
milo, mila, mide, malo, mala, made = get_min_max(msh, lmsh)
- # Discretizing the slab
- # omsh = Mesh(msh[:, :, 0], msh[:, :, 1], msh[:, :, 2])
- # olmsh = Mesh(lmsh[:, :, 0], lmsh[:, :, 1], lmsh[:, :, 2])
-
- # this `dlt` value [in degrees] is used to create a buffer around the mesh
+ # Create the 3D mesh describing the volume of the slab. This `dlt` value
+ # [in degrees] is used to create a buffer around the mesh
dlt = 5.0
- msh3d = Grid3d(milo-dlt, mila-dlt, mide, malo+dlt, mala+dlt, made, hspa,
- vspa)
- # mlo, mla, mde = msh3d.select_nodes_within_two_meshesa(omsh, olmsh)
+ msh3d = Grid3d(milo - dlt, mila - dlt, mide,
+ malo + dlt, mala + dlt, made, hspa, vspa)
+
+ # Create three vectors with the coordinates of the nodes describing the
+ # slab volume
mlo, mla, mde = msh3d.get_coordinates_vectors()
+
if False:
+ import pandas as pd
df = pd.DataFrame({'mlo': mlo, 'mla': mla, 'mde': mde})
df.to_csv('mesh_coords.csv')
- # save data on hdf5 file
+ # Removing pre-exising hdf5 file
if os.path.exists(hdf5_filename):
os.remove(hdf5_filename)
else:
path = os.path.dirname(hdf5_filename)
create_folder(path)
+
+ # Save data on hdf5 file
logging.info('Creating {:s}'.format(hdf5_filename))
fh5 = h5py.File(hdf5_filename, 'w')
grp_slab = fh5.create_group('slab')
@@ -694,18 +759,18 @@ def calculate_ruptures(ini_fname, only_plt=False, ref_fdr=None, agr=None,
grp_slab.create_dataset('bot', data=lmsh)
fh5.close()
- # Get catalogue
+ # Get earthquake catalogue
catalogue = get_catalogue(cat_pickle_fname, treg_filename, label,
sort_cat)
- # smoothing
+ # Smooth the seismicity within the volume of the slab
values, smooth = smoothing(mlo, mla, mde, catalogue, hspa, vspa,
out_hdf5_smoothing_fname)
- # Spatial index
+ # Create the spatial index
r, proj = spatial_index(smooth)
- # magnitude-frequency distribution
+ # Define the magnitude-frequency distribution
mfd = TruncatedGRMFD(min_mag=mmin, max_mag=mmax, bin_width=0.1,
a_val=agr, b_val=bgr)
@@ -713,7 +778,7 @@ def calculate_ruptures(ini_fname, only_plt=False, ref_fdr=None, agr=None,
# in this case
_ = create_ruptures(mfd, dips, sampling, msr, asprs, float_strike,
float_dip, r, values, ohs, 1., hdf5_filename,
- uniform_fraction, proj, idl, align, True)
+ uniform_fraction, proj, idl, align)
calculate_ruptures.ini_fname = '.ini filename'
diff --git a/openquake/sub/tests/data/cat/ccara_mexico_201711_dec_int_cam.pkl b/openquake/sub/tests/slab/data/cam/ccara_mexico_201711_dec_int_cam.pkl
similarity index 100%
rename from openquake/sub/tests/data/cat/ccara_mexico_201711_dec_int_cam.pkl
rename to openquake/sub/tests/slab/data/cam/ccara_mexico_201711_dec_int_cam.pkl
diff --git a/openquake/sub/tests/data/sp_cam/cs_007.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_007.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_007.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_007.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_008.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_008.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_008.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_008.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_009.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_009.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_009.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_009.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_010.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_010.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_010.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_010.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_011.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_011.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_011.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_011.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_012.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_012.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_012.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_012.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_013.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_013.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_013.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_013.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_014.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_014.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_014.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_014.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_015.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_015.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_015.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_015.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_016.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_016.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_016.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_016.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_017.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_017.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_017.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_017.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_018.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_018.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_018.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_018.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_019.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_019.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_019.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_019.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_020.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_020.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_020.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_020.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_021.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_021.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_021.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_021.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_022.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_022.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_022.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_022.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_023.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_023.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_023.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_023.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_025.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_025.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_025.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_025.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_026.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_026.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_026.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_026.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_028.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_028.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_028.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_028.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_029.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_029.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_029.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_029.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_030.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_030.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_030.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_030.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_031.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_031.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_031.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_031.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_032.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_032.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_032.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_032.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_033.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_033.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_033.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_033.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_034.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_034.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_034.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_034.csv
diff --git a/openquake/sub/tests/data/sp_cam/cs_035.csv b/openquake/sub/tests/slab/data/cam/sp_cam/cs_035.csv
similarity index 100%
rename from openquake/sub/tests/data/sp_cam/cs_035.csv
rename to openquake/sub/tests/slab/data/cam/sp_cam/cs_035.csv
diff --git a/openquake/sub/tests/slab/data/cam/test.ini b/openquake/sub/tests/slab/data/cam/test.ini
new file mode 100644
index 000000000..95bb4b3b0
--- /dev/null
+++ b/openquake/sub/tests/slab/data/cam/test.ini
@@ -0,0 +1,46 @@
+[main]
+
+profile_sd_topsl = 40.
+edge_sd_topsl = 40.
+
+sampling = 10.
+
+float_strike = -0.5
+float_dip = -1.0
+
+slab_thickness = 60.
+hspa = 20.
+vspa = 20.
+
+profile_folder = ./profiles
+
+# the pickled catalogue has the hmtk format
+catalogue_pickle_fname = .ccara_mexico_201711_dec_int_cam.pkl
+
+# the file with labels identifying earthquakes belonging to a given class
+treg_fname =
+label = slab_cam
+
+# output folder
+out_hdf5_fname = ../tmp/ruptures.hdf5
+
+# output smoothing folder
+out_hdf5_smoothing_fname = ../tmp/smoothing.hdf5
+
+# this is a lists
+dips = [45, 135]
+
+# this is a dictionary
+aspect_ratios = {2.0: 0.5, 5.0: 0.3, 10.0: 0.2}
+
+# this is a dictionary
+uniform_fraction = 1.0
+
+# magnitude scaling relationship
+mag_scaling_relation = StrasserIntraslab
+
+# MFD
+agr = 5.8
+bgr = 0.97
+mmin = 6.0
+mmax = 8.5
diff --git a/openquake/sub/tests/slab/data/mariana/classified_up.hdf5 b/openquake/sub/tests/slab/data/mariana/classified_up.hdf5
new file mode 100644
index 000000000..065cc74cb
Binary files /dev/null and b/openquake/sub/tests/slab/data/mariana/classified_up.hdf5 differ
diff --git a/openquake/sub/tests/slab/data/mariana/mariana_full_2202.pkl b/openquake/sub/tests/slab/data/mariana/mariana_full_2202.pkl
new file mode 100644
index 000000000..b068e7932
Binary files /dev/null and b/openquake/sub/tests/slab/data/mariana/mariana_full_2202.pkl differ
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_000.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_000.csv
new file mode 100644
index 000000000..9cfb11b87
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_000.csv
@@ -0,0 +1,14 @@
+1.425490222155818003e+02 2.383285145581523423e+01 5.000000000000000000e+01
+1.424028142327582600e+02 2.380583158647957021e+01 6.564918219823888990e+01
+1.422738392214201326e+02 2.378177258143302808e+01 8.287767851090505644e+01
+1.421571945848913288e+02 2.376017746608198067e+01 1.010471980323516732e+02
+1.420491126371803148e+02 2.374003455915855554e+01 1.197828856378801419e+02
+1.419466831957552415e+02 2.372082527428129239e+01 1.388590170288300101e+02
+1.418481617778002146e+02 2.370180304492677337e+01 1.581502692811891109e+02
+1.417521664255501435e+02 2.368352537619229992e+01 1.775816271088999372e+02
+1.416584002533734576e+02 2.366558031878759039e+01 1.971288866904174313e+02
+1.415670821562904393e+02 2.364863746711049330e+01 2.168064974586916662e+02
+1.414790105756601406e+02 2.363161641117148903e+01 2.366358375071824298e+02
+1.413947086575333856e+02 2.361520476900382803e+01 2.566404672514501613e+02
+1.413146005727203658e+02 2.360018978996901140e+01 2.768363358690533573e+02
+1.412392085239082746e+02 2.358527856232895914e+01 2.972211723928129459e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_001.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_001.csv
new file mode 100644
index 000000000..c9dc1f0a0
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_001.csv
@@ -0,0 +1,14 @@
+1.426950276644475935e+02 2.361086083778018363e+01 5.000000000000000000e+01
+1.425503234275046793e+02 2.358094757608811420e+01 6.419666327438048370e+01
+1.424199860545579099e+02 2.355376890425125325e+01 7.985266684989085206e+01
+1.423009061290045452e+02 2.352915789054708640e+01 9.647565715874777936e+01
+1.421902836882852341e+02 2.350564358331196146e+01 1.137202906377070804e+02
+1.420852533675153495e+02 2.348365080597844567e+01 1.313519712567032229e+02
+1.419838162579786740e+02 2.346230036051083445e+01 1.492117174639985535e+02
+1.418848464919363721e+02 2.344137301907628768e+01 1.672208814669743333e+02
+1.417876789307759964e+02 2.342073631062324424e+01 1.853356690531163053e+02
+1.416925893127529150e+02 2.340045231417608207e+01 2.035691193086996407e+02
+1.416008804501331610e+02 2.338078582521518811e+01 2.219895057014685733e+02
+1.415134520919196746e+02 2.336264713517084246e+01 2.406441883034274838e+02
+1.414318182594046220e+02 2.334490851252062171e+01 2.595749703415003751e+02
+1.413567632096549289e+02 2.332842353452246442e+01 2.788014126516852684e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_002.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_002.csv
new file mode 100644
index 000000000..aa81396ed
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_002.csv
@@ -0,0 +1,14 @@
+1.429221797868632109e+02 2.332827264603417916e+01 5.000000000000000000e+01
+1.427703372938599955e+02 2.329479567975349497e+01 6.397224636693390210e+01
+1.426317316224411798e+02 2.326416909897612229e+01 7.939663044733731567e+01
+1.425037048426328852e+02 2.323561751534559505e+01 9.580173494607309692e+01
+1.423833625687698827e+02 2.320908219595713717e+01 1.128474368891884865e+02
+1.422685842231707340e+02 2.318306234376309050e+01 1.303005583049326219e+02
+1.421570734800624791e+02 2.315820575206182497e+01 1.479944771409308828e+02
+1.420479132464409133e+02 2.313377388170200177e+01 1.658476018595323467e+02
+1.419408837540142372e+02 2.310903795056094623e+01 1.838292594961236546e+02
+1.418368811892195822e+02 2.308554967516084844e+01 2.020151019496409504e+02
+1.417379719479734206e+02 2.306309176197117239e+01 2.205106933838747807e+02
+1.416466490982543291e+02 2.304219959677580576e+01 2.394312259381962349e+02
+1.415642856313345703e+02 2.302315514885027525e+01 2.588010236785382858e+02
+1.414907205558824614e+02 2.300591260434455521e+01 2.785597704738625566e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_003.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_003.csv
new file mode 100644
index 000000000..7a2538f38
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_003.csv
@@ -0,0 +1,14 @@
+1.432907543711594656e+02 2.297909830537750864e+01 5.000000000000000000e+01
+1.431255903031651542e+02 2.294204626919931300e+01 6.377766250414728688e+01
+1.429732674472086558e+02 2.290794851323387959e+01 7.912269043221247955e+01
+1.428323963789607376e+02 2.287616823156880130e+01 9.564273431552581428e+01
+1.427004216523944251e+02 2.284615110453242437e+01 1.129626914761209804e+02
+1.425751237294695954e+02 2.281742285059511488e+01 1.308245261111789262e+02
+1.424546449870456684e+02 2.279022236829691295e+01 1.490611644264256768e+02
+1.423378778993698859e+02 2.276308492438332109e+01 1.675510520662535896e+02
+1.422242648199541577e+02 2.273720184946835232e+01 1.862673799030836790e+02
+1.421149104246553065e+02 2.271143825372358549e+01 2.052497225381591193e+02
+1.420112518320736967e+02 2.268756939214065582e+01 2.245939631521654860e+02
+1.419153595870994309e+02 2.266532704424624711e+01 2.443778679451841924e+02
+1.418288673308650800e+02 2.264506439270925497e+01 2.646381830631709704e+02
+1.417524228108570412e+02 2.262691411833314703e+01 2.853447405231232210e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_004.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_004.csv
new file mode 100644
index 000000000..018507973
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_004.csv
@@ -0,0 +1,14 @@
+1.437154361130643849e+02 2.260562386562709136e+01 5.000000000000000000e+01
+1.435547584828978813e+02 2.256927939906812597e+01 6.372046496288515982e+01
+1.434038661430285799e+02 2.253522297464332524e+01 7.864080699815127673e+01
+1.432612537479825221e+02 2.250281679549917513e+01 9.444357765093484147e+01
+1.431259217452767984e+02 2.247185053099575569e+01 1.109434097609975254e+02
+1.429967169353880934e+02 2.244207094357269838e+01 1.279810404399827917e+02
+1.428729854965683330e+02 2.241334079204509777e+01 1.454640583238528393e+02
+1.427539254841210834e+02 2.238615763563143801e+01 1.633162756533105266e+02
+1.426395770397569436e+02 2.235923568699604758e+01 1.814956238710160221e+02
+1.425296788765396911e+02 2.233389239319414443e+01 1.999899182804657869e+02
+1.424248477862895186e+02 2.230959261098714563e+01 2.188093469403997915e+02
+1.423261890677989925e+02 2.228658430080312414e+01 2.379977268551558041e+02
+1.422350039908119186e+02 2.226432235455107289e+01 2.575841020395001806e+02
+1.421514187948531003e+02 2.224532085022255856e+01 2.775679030341558473e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_005.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_005.csv
new file mode 100644
index 000000000..b76bfbd4c
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_005.csv
@@ -0,0 +1,14 @@
+1.441007563287678579e+02 2.222150860771508718e+01 5.000000000000000000e+01
+1.439342711016555540e+02 2.218525463214796645e+01 6.459347021490289364e+01
+1.437794152301758857e+02 2.215116363940460431e+01 8.055742490979297088e+01
+1.436337244790888406e+02 2.211926397188527815e+01 9.746904690488548795e+01
+1.434952236968341310e+02 2.208871231281649727e+01 1.150416891011391556e+02
+1.433626055277306648e+02 2.205924365396402109e+01 1.331121298912815405e+02
+1.432355153172292717e+02 2.203079174472971857e+01 1.516187500853236259e+02
+1.431131379219834230e+02 2.200388150117671415e+01 1.704874764514400738e+02
+1.429956072447500901e+02 2.197719557343162577e+01 1.896843403108816233e+02
+1.428822285705966522e+02 2.195200892019663641e+01 2.091691416848433107e+02
+1.427734881186774771e+02 2.192693388743415994e+01 2.289345189256571302e+02
+1.426685094364733004e+02 2.190335046861340018e+01 2.489373036299281239e+02
+1.425684737483242941e+02 2.188074971448529737e+01 2.692211234516882428e+02
+1.424737798371048143e+02 2.185920827562150492e+01 2.897901143002993081e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_006.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_006.csv
new file mode 100644
index 000000000..a20066937
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_006.csv
@@ -0,0 +1,14 @@
+1.445429365015608596e+02 2.182876541696778006e+01 5.000000000000000000e+01
+1.443675038728798654e+02 2.178756054323338631e+01 6.440079362996274881e+01
+1.442071429719855757e+02 2.174970012332288150e+01 8.068303979374110213e+01
+1.440587964382282848e+02 2.171427299350833806e+01 9.821390316006142029e+01
+1.439191769883268250e+02 2.168115811833089168e+01 1.165530532958618721e+02
+1.437860012956682851e+02 2.164934028765681973e+01 1.354267557803853208e+02
+1.436578287938346818e+02 2.161918382676546102e+01 1.546997979634813021e+02
+1.435343565108487383e+02 2.158931627466393977e+01 1.743030952260513686e+02
+1.434151307946973191e+02 2.156026997848408300e+01 1.941997544272934704e+02
+1.432999253560172406e+02 2.153278553598301670e+01 2.143742965625837087e+02
+1.431887433194263792e+02 2.150532692646148902e+01 2.347893027590502300e+02
+1.430806627500918751e+02 2.147929147834772223e+01 2.554041157499573558e+02
+1.429757460775403217e+02 2.145301876416702669e+01 2.761892236274983929e+02
+1.428733096403061609e+02 2.142810545234420516e+01 2.971263111932937022e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_007.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_007.csv
new file mode 100644
index 000000000..68f53dc7f
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_007.csv
@@ -0,0 +1,14 @@
+1.450068869681998933e+02 2.146190065111038336e+01 5.000000000000000000e+01
+1.448232985120052092e+02 2.141913301732793684e+01 6.348535696488826829e+01
+1.446538086283993039e+02 2.137989670970771527e+01 7.892039432639880658e+01
+1.445000446655516555e+02 2.134351847766458476e+01 9.611688155294520186e+01
+1.443602554802524196e+02 2.131060833917872799e+01 1.146404699145080599e+02
+1.442313048891216170e+02 2.127997029915853489e+01 1.340454575838178926e+02
+1.441096654892457423e+02 2.125081624982933093e+01 1.539831452698100236e+02
+1.439922442100790931e+02 2.122315924674665411e+01 1.742180494334838272e+02
+1.438775655916525977e+02 2.119531979178656300e+01 1.946180504515526479e+02
+1.437640703273397946e+02 2.116837802234107002e+01 2.151030213933850348e+02
+1.436512726250401499e+02 2.114152695596020237e+01 2.356298045140516422e+02
+1.435388267597119807e+02 2.111386984948876844e+01 2.561630692856433029e+02
+1.434261025485704693e+02 2.108688419924656188e+01 2.766896171727822775e+02
+1.433132971007349283e+02 2.105892465055399043e+01 2.971940809753708663e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_008.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_008.csv
new file mode 100644
index 000000000..593ed028d
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_008.csv
@@ -0,0 +1,14 @@
+1.453577831767065334e+02 2.105784550380580100e+01 5.000000000000000000e+01
+1.451811015924173205e+02 2.101601235753024355e+01 6.337314479309289084e+01
+1.450148810324053841e+02 2.097639708928135960e+01 7.818151698455199039e+01
+1.448629272110416366e+02 2.094034825877401929e+01 9.464450609478572574e+01
+1.447273868027944843e+02 2.090791071301387660e+01 1.126770554581633093e+02
+1.446066169610689656e+02 2.087869496438514361e+01 1.318879436707411514e+02
+1.444970448117251749e+02 2.085251547100811820e+01 1.518723140341488147e+02
+1.443954011592829829e+02 2.082741080444051818e+01 1.723265485567080759e+02
+1.442984416046258787e+02 2.080393555794156413e+01 1.930504671335751539e+02
+1.442039435036465989e+02 2.078095193367359528e+01 2.139042983100694926e+02
+1.441103915380294609e+02 2.075812247130130572e+01 2.348058311486920218e+02
+1.440164661805859794e+02 2.073514129922932270e+01 2.556863528853842524e+02
+1.439211647695909164e+02 2.071178690084941465e+01 2.764932624182340533e+02
+1.438238522162172046e+02 2.068791066937871292e+01 2.971904886646627801e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_009.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_009.csv
new file mode 100644
index 000000000..67e521b0c
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_009.csv
@@ -0,0 +1,14 @@
+1.455952150508406646e+02 2.066086821975643417e+01 5.000000000000000000e+01
+1.454225167464360595e+02 2.062244685450763271e+01 6.362996811321310986e+01
+1.452591179255904308e+02 2.058622960035993543e+01 7.851175899792707469e+01
+1.451080481387585905e+02 2.055206222489489321e+01 9.478816820001247834e+01
+1.449716155359472509e+02 2.052135602071240328e+01 1.124872753369715213e+02
+1.448498127928540384e+02 2.049421778993738741e+01 1.313841688053453254e+02
+1.447403637003594383e+02 2.046906789722364906e+01 1.511269495974794097e+02
+1.446400310573370120e+02 2.044636488825955567e+01 1.714294637629130307e+02
+1.445462613890469470e+02 2.042500002354254462e+01 1.920905590493071600e+02
+1.444567521435767503e+02 2.040448242813148028e+01 2.129677306421647245e+02
+1.443697602758247456e+02 2.038444068909634410e+01 2.339662278532996424e+02
+1.442840126128710949e+02 2.036460345865389243e+01 2.550225162111749739e+02
+1.441985549942239970e+02 2.034476714921890306e+01 2.760912283733947561e+02
+1.441124360604478056e+02 2.032550864823003067e+01 2.971366460771924380e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_010.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_010.csv
new file mode 100644
index 000000000..6ad14e52a
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_010.csv
@@ -0,0 +1,14 @@
+1.457939649787660983e+02 2.023978990131380229e+01 5.000000000000000000e+01
+1.456274454012095418e+02 2.020159264225888407e+01 6.407056183070253041e+01
+1.454707570882337961e+02 2.016575585044343910e+01 7.939128484278998599e+01
+1.453249586544576459e+02 2.013220687667340059e+01 9.589728276511185356e+01
+1.451914004909330345e+02 2.010124533512028933e+01 1.135552222644245006e+02
+1.450700447488721068e+02 2.007285874139316206e+01 1.322050504875995500e+02
+1.449594725782932585e+02 2.004730252231525256e+01 1.516249292707142899e+02
+1.448583843983348913e+02 2.002319031616895373e+01 1.716272898639221012e+02
+1.447644158111330910e+02 2.000116420442324028e+01 1.920366679064426307e+02
+1.446759679523905788e+02 1.998030171724233739e+01 2.127299038596873402e+02
+1.445917162034695878e+02 1.996098629556436066e+01 2.336322500478521533e+02
+1.445111119927105676e+02 1.994177516728196053e+01 2.546929601515238915e+02
+1.444329330892984444e+02 1.992304455180199696e+01 2.758587776093859816e+02
+1.443567284296235584e+02 1.990469652143689316e+01 2.971070839094896314e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_011.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_011.csv
new file mode 100644
index 000000000..e67f46e04
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_011.csv
@@ -0,0 +1,14 @@
+1.460004245552748046e+02 1.982689892222083472e+01 5.000000000000000000e+01
+1.458447330204320451e+02 1.979432438018547202e+01 6.379461426620873965e+01
+1.456984939682270976e+02 1.976366742922073882e+01 7.873420483312006013e+01
+1.455619518345449421e+02 1.973485907299042452e+01 9.468975780637693163e+01
+1.454354332889188299e+02 1.970796413706496608e+01 1.115669539763125897e+02
+1.453187463527520151e+02 1.968294102337345564e+01 1.292397974832790339e+02
+1.452113834959943972e+02 1.966021721447147641e+01 1.475881199813816238e+02
+1.451123662692259302e+02 1.963912406960003665e+01 1.664702994781509631e+02
+1.450209955043611671e+02 1.961952634068421375e+01 1.857914223935618452e+02
+1.449358176338427029e+02 1.960112307649112395e+01 2.054367424977694441e+02
+1.448559273856850496e+02 1.958373639877330064e+01 2.253363668826299886e+02
+1.447806733306129559e+02 1.956723348170392640e+01 2.454431568508431383e+02
+1.447086502066499918e+02 1.955199381384612778e+01 2.656922149167161251e+02
+1.446397810729071978e+02 1.953669985970659440e+01 2.860610686640727067e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_012.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_012.csv
new file mode 100644
index 000000000..362304dee
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_012.csv
@@ -0,0 +1,14 @@
+1.462138234147023184e+02 1.940053310875810766e+01 5.000000000000000000e+01
+1.460565885630493597e+02 1.936732238342409218e+01 6.442948390834639838e+01
+1.459093848585411592e+02 1.933610537025263554e+01 8.003586041136053097e+01
+1.457721367011064615e+02 1.930681110896619757e+01 9.665477920513865229e+01
+1.456455852836762972e+02 1.927959433490429575e+01 1.142246272548442221e+02
+1.455299516994665794e+02 1.925499061330265960e+01 1.326526750866150621e+02
+1.454248783362271809e+02 1.923249525011630112e+01 1.518000957460238851e+02
+1.453297660735019292e+02 1.921144677673206047e+01 1.715356338458212804e+02
+1.452431993895381197e+02 1.919317801314291216e+01 1.917361973560386161e+02
+1.451639925037447938e+02 1.917581879003343914e+01 2.122793623719055631e+02
+1.450907257458561332e+02 1.915962037656180073e+01 2.330771561394464868e+02
+1.450218667241750552e+02 1.914489862434950140e+01 2.540549252898404973e+02
+1.449573240818828026e+02 1.913040552504805092e+01 2.751858742339444461e+02
+1.448953978364338582e+02 1.911705870239350702e+01 2.964128956172802987e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_013.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_013.csv
new file mode 100644
index 000000000..cc0881264
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_013.csv
@@ -0,0 +1,14 @@
+1.465456257448776114e+02 1.853989862749293849e+01 5.000000000000000000e+01
+1.463842501593039458e+02 1.850610301781295064e+01 6.330304444010740639e+01
+1.462316770451654122e+02 1.847423011572098872e+01 7.776644212398664990e+01
+1.460882032955373973e+02 1.844408880019829056e+01 9.327106897251961470e+01
+1.459549690279521315e+02 1.841591293139752494e+01 1.097996726648133574e+02
+1.458331016701284284e+02 1.839038349180915688e+01 1.273289058136387979e+02
+1.457225055026155758e+02 1.836708699578744231e+01 1.457096186024535598e+02
+1.456225973217213721e+02 1.834590627401278340e+01 1.647936396866350321e+02
+1.455320495501674429e+02 1.832657225208857099e+01 1.844179541047783175e+02
+1.454493263318062475e+02 1.830877263661225740e+01 2.044436874951792049e+02
+1.453731120924635150e+02 1.829224043844505587e+01 2.247701160040059563e+02
+1.453021009027063712e+02 1.827729372912343919e+01 2.453217534176822028e+02
+1.452356910928510274e+02 1.826267135541584352e+01 2.660478060601764696e+02
+1.451725399522607347e+02 1.824927596943086527e+01 2.868979135013532868e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_014.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_014.csv
new file mode 100644
index 000000000..b952aac63
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_014.csv
@@ -0,0 +1,14 @@
+1.466540728028636238e+02 1.811316786382399968e+01 5.000000000000000000e+01
+1.464817916079417444e+02 1.807976978122973577e+01 6.231744479224488487e+01
+1.463177575062311462e+02 1.804772597092005171e+01 7.587914698757120391e+01
+1.461634182679342473e+02 1.801743864620011948e+01 9.070377910848658587e+01
+1.460210983711512824e+02 1.798940755242289313e+01 1.068648878556460744e+02
+1.458915126073212605e+02 1.796367762902972487e+01 1.242239569406115152e+02
+1.457747006803896852e+02 1.794072493108175337e+01 1.426167092694804239e+02
+1.456693933211675756e+02 1.791989870046991840e+01 1.618032870327474484e+02
+1.455743298966854979e+02 1.790096152505919846e+01 1.816057553374368467e+02
+1.454878985602016712e+02 1.788360742833549466e+01 2.018667159868662111e+02
+1.454087078508701438e+02 1.786757391324834643e+01 2.224712015990071166e+02
+1.453351390328468824e+02 1.785312454568279961e+01 2.433240408122540543e+02
+1.452664675655875044e+02 1.783900586713224357e+01 2.643665902229062112e+02
+1.452013041489430805e+02 1.782610637626887851e+01 2.855442046903894493e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_015.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_015.csv
new file mode 100644
index 000000000..67a64505c
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_015.csv
@@ -0,0 +1,14 @@
+1.467159454811783519e+02 1.766659467640987202e+01 5.000000000000000000e+01
+1.465382304632978219e+02 1.763218718374299954e+01 6.130897100110443887e+01
+1.463666026962067974e+02 1.759904212131289114e+01 7.366875476113321497e+01
+1.462050671357360159e+02 1.756715675151916045e+01 8.750380946342330901e+01
+1.460570569093264339e+02 1.753810329590255535e+01 1.030101547584775119e+02
+1.459237306732036075e+02 1.751171765778047984e+01 1.199983511436262518e+02
+1.458048195310087181e+02 1.748841484953206304e+01 1.382073024535167178e+02
+1.456980265618671240e+02 1.746735083574629499e+01 1.572774641360243777e+02
+1.456018221912667343e+02 1.744823830907984785e+01 1.769993149718185350e+02
+1.455145061041530425e+02 1.743075596826516005e+01 1.972023876701146321e+02
+1.454348324610070335e+02 1.741466975380912530e+01 2.177734384649070307e+02
+1.453613607357656861e+02 1.740027083336961766e+01 2.386200576466449661e+02
+1.452933323781966806e+02 1.738631114760547192e+01 2.596781728276359900e+02
+1.452293243831526013e+02 1.737366021086376477e+01 2.808888781283860681e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_016.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_016.csv
new file mode 100644
index 000000000..329e9142c
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_016.csv
@@ -0,0 +1,14 @@
+1.467249707015076297e+02 1.720369504294813368e+01 5.000000000000000000e+01
+1.465387409173080471e+02 1.717028990378180708e+01 6.133625316879936662e+01
+1.463583824758821095e+02 1.713773809877298149e+01 7.371478489244189802e+01
+1.461885473984391695e+02 1.710719964898912693e+01 8.771860158304485822e+01
+1.460338421851055841e+02 1.707921829464246599e+01 1.036421239798961125e+02
+1.458971429551000085e+02 1.705372538619895195e+01 1.213834570236546426e+02
+1.457757815666816441e+02 1.703166807281466788e+01 1.403968114572878392e+02
+1.456684328449661905e+02 1.701153696476263022e+01 1.603672363739096625e+02
+1.455728436411753250e+02 1.699387141593386730e+01 1.810325653406281674e+02
+1.454869648328273968e+02 1.697837938947479230e+01 2.021987510443680662e+02
+1.454088902246841997e+02 1.696370430354743064e+01 2.237134888962056607e+02
+1.453370000257777690e+02 1.695061857523154458e+01 2.454844782886906103e+02
+1.452702021804392132e+02 1.693784382920530263e+01 2.674417973451986654e+02
+1.452069954755805554e+02 1.692623769548365331e+01 2.895277644310283449e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_017.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_017.csv
new file mode 100644
index 000000000..1e21a045e
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_017.csv
@@ -0,0 +1,14 @@
+1.466852985076440348e+02 1.674249650677199952e+01 5.000000000000000000e+01
+1.464991819940116784e+02 1.670948509105539515e+01 6.129385561555156414e+01
+1.463190416188099050e+02 1.667731781383035994e+01 7.365957000955584988e+01
+1.461493134080428149e+02 1.664679639048008752e+01 8.763710605918498686e+01
+1.459952214398837782e+02 1.661883550732222758e+01 1.035953601775527915e+02
+1.458587884203600140e+02 1.659403732623780670e+01 1.213430223734806646e+02
+1.457387896469865325e+02 1.657243654679090383e+01 1.404408653521254280e+02
+1.456331554888231778e+02 1.655327684993002890e+01 1.605140767761561449e+02
+1.455392152075364720e+02 1.653609620792786572e+01 1.812633926144501686e+02
+1.454542260995244192e+02 1.652041955765585612e+01 2.024643854746803413e+02
+1.453762691058733481e+02 1.650591468005102769e+01 2.239822713023461915e+02
+1.453035097740060166e+02 1.649280795242157183e+01 2.457187566491208486e+02
+1.452351641963364273e+02 1.647989859635180565e+01 2.676194838460274354e+02
+1.451696987495607516e+02 1.646801740617618393e+01 2.896279226336246779e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_018.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_018.csv
new file mode 100644
index 000000000..202286a8e
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_018.csv
@@ -0,0 +1,14 @@
+1.466173724304344432e+02 1.626264452489800405e+01 5.000000000000000000e+01
+1.464288281520987312e+02 1.622875457572929037e+01 6.189408994992010093e+01
+1.462465428250898754e+02 1.619607734988314718e+01 7.488510598614851688e+01
+1.460745694614201682e+02 1.616480430653439271e+01 8.942066133144291484e+01
+1.459174675024480621e+02 1.613634576740698634e+01 1.058302798211145728e+02
+1.457791508185991631e+02 1.611054611027501338e+01 1.241220980412725652e+02
+1.456569731243701824e+02 1.608830908831047068e+01 1.437383200726476389e+02
+1.455476604191885031e+02 1.606828306165035869e+01 1.642321412428196652e+02
+1.454489991624595575e+02 1.605007910618477496e+01 1.853585503079223429e+02
+1.453581158056484242e+02 1.603319491997606505e+01 2.068949134663733673e+02
+1.452730906600123717e+02 1.601729182231369464e+01 2.287138429911503579e+02
+1.451923603786357546e+02 1.600209673970503488e+01 2.507252584727104932e+02
+1.451145138923276363e+02 1.598792043933668872e+01 2.728640248967626007e+02
+1.450388401031049170e+02 1.597354370123832190e+01 2.950873000280860765e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_019.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_019.csv
new file mode 100644
index 000000000..2dd1c30b0
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_019.csv
@@ -0,0 +1,14 @@
+1.465375640875109013e+02 1.583977507444341803e+01 5.000000000000000000e+01
+1.463480963094877723e+02 1.581448284586073960e+01 6.236930398757008476e+01
+1.461653055927586422e+02 1.578991563361119077e+01 7.585016624548359232e+01
+1.459932468090107704e+02 1.576690201002860015e+01 9.088001741422807811e+01
+1.458357741452260541e+02 1.574533865649645037e+01 1.076670010748382822e+02
+1.456944409801856466e+02 1.572608926827945375e+01 1.260671231624809252e+02
+1.455686638049522799e+02 1.570849011142251861e+01 1.457472004005219048e+02
+1.454555593470143151e+02 1.569303261511030456e+01 1.663150576514978241e+02
+1.453521237914083883e+02 1.567829694564913900e+01 1.874660014326872499e+02
+1.452553615212318050e+02 1.566534633772089080e+01 2.089910710380473233e+02
+1.451638005063957451e+02 1.565254159666183753e+01 2.307773191387909151e+02
+1.450760265460013159e+02 1.564018250025153733e+01 2.527453563837247543e+02
+1.449906810237141030e+02 1.562809282338812622e+01 2.748250921102873008e+02
+1.449065828356662848e+02 1.561669517395637818e+01 2.969642051422231361e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_020.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_020.csv
new file mode 100644
index 000000000..c56b3b030
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_020.csv
@@ -0,0 +1,14 @@
+1.464357230386359561e+02 1.541506013516966433e+01 5.000000000000000000e+01
+1.462465129089623304e+02 1.540098934649019391e+01 6.248972098000723463e+01
+1.460637933663211641e+02 1.538727420864420559e+01 7.604990911941929710e+01
+1.458915991747544467e+02 1.537399407023207765e+01 9.111576406559846930e+01
+1.457345546327448176e+02 1.536199774307766219e+01 1.079905946630481992e+02
+1.455925954885558156e+02 1.535096788137497015e+01 1.263451379206975957e+02
+1.454644225439354557e+02 1.534123460927918892e+01 1.458420485475951693e+02
+1.453482473753207671e+02 1.533185898329065466e+01 1.661925317687193342e+02
+1.452410948143868268e+02 1.532349315430714398e+01 1.871137593025682122e+02
+1.451407573910528583e+02 1.531556207453544438e+01 2.084245499188238853e+02
+1.450454267117909808e+02 1.530793873359352197e+01 2.300012375984397295e+02
+1.449534973307278563e+02 1.530051102884853442e+01 2.517488354354883597e+02
+1.448638934907628197e+02 1.529320446139642087e+01 2.736087298750769037e+02
+1.447753800679360552e+02 1.528648925487853383e+01 2.955222084450724651e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_021.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_021.csv
new file mode 100644
index 000000000..dc9e91dba
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_021.csv
@@ -0,0 +1,14 @@
+1.463247736205888145e+02 1.500912803278064622e+01 5.000000000000000000e+01
+1.461351518886950487e+02 1.501076078423859883e+01 6.264825056279811832e+01
+1.459516915965498072e+02 1.501216403545275746e+01 7.629834695269104827e+01
+1.457784916533544788e+02 1.501359281313519922e+01 9.140152555331890483e+01
+1.456198864909210897e+02 1.501443256075784305e+01 1.082509979512046954e+02
+1.454773913251669057e+02 1.501528210086563320e+01 1.266981855664752743e+02
+1.453497316676918274e+02 1.501623709287206587e+01 1.463720905877226812e+02
+1.452339990952778237e+02 1.501659170487335260e+01 1.668894922290417639e+02
+1.451274582118910530e+02 1.501673316274685988e+01 1.879785004584123840e+02
+1.450277065062447264e+02 1.501711585376561686e+01 2.094490699014056361e+02
+1.449324767259267617e+02 1.501740218123640602e+01 2.311559225970565592e+02
+1.448403022234854802e+02 1.501761031361904841e+01 2.530149853826861772e+02
+1.447500689893710160e+02 1.501775444807039861e+01 2.749676256590189496e+02
+1.446609323546191774e+02 1.501838118697724767e+01 2.969720545585723812e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_022.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_022.csv
new file mode 100644
index 000000000..bbee1e2f5
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_022.csv
@@ -0,0 +1,14 @@
+1.461879164240309876e+02 1.464409619057272316e+01 5.000000000000000000e+01
+1.460019779848153405e+02 1.466915345183881492e+01 6.248757325224844550e+01
+1.458224757266343943e+02 1.469342241764009493e+01 7.602750583170993082e+01
+1.456544987879060500e+02 1.471572005513616865e+01 9.120425813573055507e+01
+1.455026579409243368e+02 1.473595253476700861e+01 1.082655980287016177e+02
+1.453679051574207222e+02 1.475372161622893330e+01 1.269607667816008956e+02
+1.452475768802443383e+02 1.476939402276950375e+01 1.467983584600364679e+02
+1.451382122179357737e+02 1.478385350550768784e+01 1.673769162682535807e+02
+1.450369236702498199e+02 1.479714707199616086e+01 1.884422835150923277e+02
+1.449415506501380548e+02 1.480957625096050734e+01 2.098339016840126590e+02
+1.448505002543925002e+02 1.482136378758879935e+01 2.314482347102998290e+02
+1.447626400309403607e+02 1.483266730217891904e+01 2.532188796617625997e+02
+1.446768690045504684e+02 1.484363903189754019e+01 2.750884468548373434e+02
+1.445920409660130588e+02 1.485443773005243706e+01 2.970019827076467891e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_023.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_023.csv
new file mode 100644
index 000000000..0fbbc855e
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_023.csv
@@ -0,0 +1,14 @@
+1.459201343386703513e+02 1.425912546108947865e+01 5.000000000000000000e+01
+1.457440122521176420e+02 1.430261441885063078e+01 6.238834810555974997e+01
+1.455783917172335009e+02 1.434323701170317023e+01 7.645029315543222026e+01
+1.454276315984294854e+02 1.438027276525142995e+01 9.243580564779591668e+01
+1.452931028635538837e+02 1.441283777195720361e+01 1.101482441841789210e+02
+1.451728798244004111e+02 1.444235002073901342e+01 1.290972478510827557e+02
+1.450641698987028576e+02 1.446857077443638318e+01 1.489025242544941818e+02
+1.449650121593919323e+02 1.449269472224339594e+01 1.693190293337041226e+02
+1.448729730334285364e+02 1.451498862472477747e+01 1.901480625402696205e+02
+1.447864584739641316e+02 1.453585586492545900e+01 2.112698411634271451e+02
+1.447039375902542417e+02 1.455567814537616123e+01 2.325900910300166231e+02
+1.446242351834806357e+02 1.457520566269389306e+01 2.540385970883573066e+02
+1.445460002313500070e+02 1.459388892945176153e+01 2.755594703025102490e+02
+1.444679454690445652e+02 1.461248184051414434e+01 2.970892653767593856e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_024.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_024.csv
new file mode 100644
index 000000000..a73007348
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_024.csv
@@ -0,0 +1,14 @@
+1.455835474480892344e+02 1.394882264000774441e+01 5.000000000000000000e+01
+1.454241881208316727e+02 1.400099789008534934e+01 6.331733125703959075e+01
+1.452789524534491932e+02 1.404860250118811571e+01 7.859432859318043540e+01
+1.451483975552738457e+02 1.409138067309604025e+01 9.550731439539629264e+01
+1.450313598487790330e+02 1.412956172395919552e+01 1.136627701574256832e+02
+1.449254587262268501e+02 1.416393213251371286e+01 1.326885988671469647e+02
+1.448291999259622571e+02 1.419499428468104618e+01 1.523706574806315928e+02
+1.447410048286297410e+02 1.422365931282279128e+01 1.725327140344698478e+02
+1.446587448833557801e+02 1.425029665796704315e+01 1.930196468488175014e+02
+1.445810955496611143e+02 1.427535248654553968e+01 2.137400125841608656e+02
+1.445061844472302823e+02 1.429987472739159138e+01 2.345861048512311129e+02
+1.444322283872483581e+02 1.432362452621136661e+01 2.554833187333381659e+02
+1.443586157499701983e+02 1.434721715689140886e+01 2.763971704276309538e+02
+1.442829734442618417e+02 1.437143269479685515e+01 2.972177807737390935e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_025.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_025.csv
new file mode 100644
index 000000000..77d386f15
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_025.csv
@@ -0,0 +1,14 @@
+1.452896637080405355e+02 1.369021819749838009e+01 5.000000000000000000e+01
+1.451513544911070710e+02 1.375666806989713109e+01 6.448976308047015493e+01
+1.450257047266648271e+02 1.381706870110990337e+01 8.057771019994387984e+01
+1.449122240224284610e+02 1.387146612374378485e+01 9.793968569246800371e+01
+1.448092125178200718e+02 1.392068173619286853e+01 1.162366150430419083e+02
+1.447163196717286837e+02 1.396489649022562141e+01 1.353073036995859582e+02
+1.446315602243493004e+02 1.400540071472505588e+01 1.549199417664838165e+02
+1.445530569344047080e+02 1.404282158361150401e+01 1.749103252290911144e+02
+1.444791881115376100e+02 1.407794612644151577e+01 1.951584666976674214e+02
+1.444085264605554926e+02 1.411184654728957888e+01 2.155664999608283097e+02
+1.443394209579425933e+02 1.414458879690427828e+01 2.360605412010123416e+02
+1.442705282897983068e+02 1.417718149264483074e+01 2.565663718457243476e+02
+1.442004673877785308e+02 1.421029544614492401e+01 2.770158853944825523e+02
+1.441280273511555947e+02 1.424495845989493681e+01 2.973365687322973940e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_026.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_026.csv
new file mode 100644
index 000000000..e33119592
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_026.csv
@@ -0,0 +1,14 @@
+1.449671382814323124e+02 1.341865918841377159e+01 5.000000000000000000e+01
+1.448457190949354185e+02 1.350265994380561807e+01 6.494462676804923262e+01
+1.447354361172937445e+02 1.357884362808945156e+01 8.135797058874278775e+01
+1.446356211853627940e+02 1.364763936290839119e+01 9.892291732822874906e+01
+1.445456663769368504e+02 1.370974109482919623e+01 1.174000247474475742e+02
+1.444639695923373779e+02 1.376604243514563741e+01 1.365482346601808388e+02
+1.443891154764748421e+02 1.381753477598377167e+01 1.561863674645107380e+02
+1.443192092209552015e+02 1.386553447641078129e+01 1.761474338887941258e+02
+1.442525296617353661e+02 1.391124228850649125e+01 1.963040171677887713e+02
+1.441877799188024767e+02 1.395555963348336626e+01 2.165729395485165298e+02
+1.441238313414691277e+02 1.399963568857140039e+01 2.368786658570500947e+02
+1.440594030487290524e+02 1.404365322986209641e+01 2.571686549022787744e+02
+1.439934314477341388e+02 1.408869185555644066e+01 2.773732138754613175e+02
+1.439250274261490290e+02 1.413578019911118133e+01 2.974257074843957867e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_027.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_027.csv
new file mode 100644
index 000000000..0972d94e7
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_027.csv
@@ -0,0 +1,14 @@
+1.446338205595895090e+02 1.319557798800630444e+01 5.000000000000000000e+01
+1.445236088326304866e+02 1.329222514186677451e+01 6.510141682092850601e+01
+1.444246068766863118e+02 1.337899542199452441e+01 8.178386133376712053e+01
+1.443358202393967247e+02 1.345688294344574309e+01 9.964784251327469633e+01
+1.442555066579864729e+02 1.352698443697594577e+01 1.183656771897947948e+02
+1.441819676603577420e+02 1.359128944422482199e+01 1.376624377159344874e+02
+1.441134984161656405e+02 1.365107179546406613e+01 1.573548243456611431e+02
+1.440485533126512507e+02 1.370769489138001518e+01 1.773023315493402379e+02
+1.439856732041088208e+02 1.376244688760934309e+01 1.973921405519312486e+02
+1.439237781355305970e+02 1.381628056555454975e+01 2.175488250247806548e+02
+1.438617055290251869e+02 1.387021834057523151e+01 2.376962318398602747e+02
+1.437987701234916074e+02 1.392524011397849293e+01 2.577767228614127362e+02
+1.437337768716292601e+02 1.398166483787501413e+01 2.777327045101418435e+02
+1.436662112846387913e+02 1.404030055583438319e+01 2.975103464389945884e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_028.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_028.csv
new file mode 100644
index 000000000..2d9f211c6
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_028.csv
@@ -0,0 +1,14 @@
+1.441557274490049281e+02 1.294382754537140734e+01 5.000000000000000000e+01
+1.440610375287527063e+02 1.305026388938619597e+01 6.565288277611027468e+01
+1.439775906483682490e+02 1.314389320312907827e+01 8.298908534912105495e+01
+1.439033406034134543e+02 1.322726015132251831e+01 1.014343370028930593e+02
+1.438357074839163943e+02 1.330285121289933414e+01 1.205813980619719530e+02
+1.437729151875620914e+02 1.337315367485616235e+01 1.401669172110872523e+02
+1.437130999976796204e+02 1.344004214542127507e+01 1.600084925616346823e+02
+1.436548077037697055e+02 1.350545790322905226e+01 1.799638811019889033e+02
+1.435967034305974153e+02 1.357032691254131684e+01 1.999480563459751750e+02
+1.435377397374133182e+02 1.363610962295126150e+01 2.198663026646683818e+02
+1.434770072997295642e+02 1.370382911856176911e+01 2.396424960448229911e+02
+1.434138576554344127e+02 1.377421395845185970e+01 2.592155554060802842e+02
+1.433480782748050615e+02 1.384750082274066862e+01 2.785563070251301383e+02
+1.432797557113773337e+02 1.392358934741329080e+01 2.976612369697547251e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_029.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_029.csv
new file mode 100644
index 000000000..3eeb84e07
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_029.csv
@@ -0,0 +1,14 @@
+1.437348927012627655e+02 1.274712647450814273e+01 5.000000000000000000e+01
+1.436643167887194750e+02 1.286272901881399910e+01 6.632369513786092341e+01
+1.436027132108494584e+02 1.296345585632888309e+01 8.421200107685244518e+01
+1.435479685800604273e+02 1.305301381158891871e+01 1.030675539854802878e+02
+1.434976643042949718e+02 1.313521145963837533e+01 1.224726234329964001e+02
+1.434503326721407177e+02 1.321246576143770035e+01 1.422126512921470578e+02
+1.434043374715913330e+02 1.328746701496850413e+01 1.620962335598452455e+02
+1.433587175316511662e+02 1.336179380151988383e+01 1.820212732852790793e+02
+1.433123883686095894e+02 1.343722547739289652e+01 2.018762603279025143e+02
+1.432644995913979642e+02 1.351515516390578853e+01 2.215689315529821499e+02
+1.432143050497107026e+02 1.359680387052000228e+01 2.410084913970301841e+02
+1.431617015667471264e+02 1.368233645171287449e+01 2.601675223207049612e+02
+1.431068868674651355e+02 1.377142468258294805e+01 2.790549389495273545e+02
+1.430506636777442679e+02 1.386274949098217668e+01 2.977635290048355614e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_030.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_030.csv
new file mode 100644
index 000000000..cfdbdf912
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_030.csv
@@ -0,0 +1,14 @@
+1.432126908087810193e+02 1.252214746589538485e+01 5.000000000000000000e+01
+1.431728739932549104e+02 1.264971234737769912e+01 6.670084118500236059e+01
+1.431382410392834288e+02 1.276048347149498419e+01 8.493635658937317601e+01
+1.431072712018429343e+02 1.285957859199700160e+01 1.040523688939838252e+02
+1.430785912318091846e+02 1.295124846683261488e+01 1.236586309969446233e+02
+1.430512630510710892e+02 1.303851186922934779e+01 1.435324911864663875e+02
+1.430245112540292780e+02 1.312386067061877348e+01 1.635173005711901624e+02
+1.429976190245252212e+02 1.320959524135744978e+01 1.834795582682481836e+02
+1.429699162438040503e+02 1.329786332800797588e+01 2.032927401820269608e+02
+1.429409028473849332e+02 1.339026396340304714e+01 2.228506836010964491e+02
+1.429100769248916549e+02 1.348840053813108852e+01 2.420306643326883886e+02
+1.428776096788600398e+02 1.359171706907065413e+01 2.608433113771512808e+02
+1.428438971666729458e+02 1.369857731071218332e+01 2.793873124224114690e+02
+1.428099680183551925e+02 1.380639334384850869e+01 2.978591131281486923e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_031.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_031.csv
new file mode 100644
index 000000000..0c760cae8
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_031.csv
@@ -0,0 +1,14 @@
+1.425139052003446807e+02 1.230379858829311601e+01 5.000000000000000000e+01
+1.425041791995312224e+02 1.244582286355832856e+01 6.641774919158372370e+01
+1.424955892209671333e+02 1.257112119207866030e+01 8.446018163667034173e+01
+1.424878594594029835e+02 1.268387763238674637e+01 1.035051799442988312e+02
+1.424806480059173168e+02 1.278877521321053479e+01 1.231006258622609693e+02
+1.424737482617983346e+02 1.288904711583585083e+01 1.429930491554175660e+02
+1.424669607315792916e+02 1.298772976069845875e+01 1.629831974917433115e+02
+1.424601276337230331e+02 1.308700356527340070e+01 1.829369977114399148e+02
+1.424531063797831507e+02 1.318894766374665828e+01 2.027237930119520399e+02
+1.424458008582172965e+02 1.329495993436961498e+01 2.222451822217457220e+02
+1.424381778441905908e+02 1.340551900606732616e+01 2.414538070359509732e+02
+1.424302594024193809e+02 1.351996409269422017e+01 2.603811879555591986e+02
+1.424222071846481299e+02 1.363658659932373141e+01 2.791453329914800747e+02
+1.424141458179538517e+02 1.375325043218474619e+01 2.979063062208385304e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_032.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_032.csv
new file mode 100644
index 000000000..f508d3849
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_032.csv
@@ -0,0 +1,14 @@
+1.420816261120621107e+02 1.223600687419185995e+01 5.000000000000000000e+01
+1.420987377838664258e+02 1.237990879306447489e+01 6.660923681861059720e+01
+1.421141997837485746e+02 1.250993565742404279e+01 8.459105427411522271e+01
+1.421285321897495066e+02 1.263015232003222721e+01 1.034070307890203253e+02
+1.421420871431957949e+02 1.274391082211758253e+01 1.227178507188435646e+02
+1.421552153580163065e+02 1.285375493522298385e+01 1.423093220689911504e+02
+1.421681128342322893e+02 1.296179463253197284e+01 1.620256057940793539e+02
+1.421809780549491506e+02 1.306947992969263694e+01 1.817659462436202489e+02
+1.421939570999521152e+02 1.317803800702850658e+01 2.014467478327428580e+02
+1.422072176535858432e+02 1.328857789625689456e+01 2.209897209987867654e+02
+1.422207663860403102e+02 1.340138478658126431e+01 2.403710979911467405e+02
+1.422345115166620815e+02 1.351607666730651580e+01 2.596149555446837098e+02
+1.422484187646238638e+02 1.363203740244725815e+01 2.787642519211991043e+02
+1.422624248697162557e+02 1.374833419385435462e+01 2.978877532474808163e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_033.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_033.csv
new file mode 100644
index 000000000..7b0a79f05
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_033.csv
@@ -0,0 +1,14 @@
+1.417639620451518283e+02 1.222971837668900896e+01 5.000000000000000000e+01
+1.417981723257915405e+02 1.236849567102166247e+01 6.665539916185529989e+01
+1.418294615890292221e+02 1.249524149958354968e+01 8.451079501174578468e+01
+1.418587936478273548e+02 1.261412786178417278e+01 1.030559662411102835e+02
+1.418870495268479033e+02 1.272829741856182650e+01 1.219810130588852672e+02
+1.419146347966725159e+02 1.283989236002913614e+01 1.411053522463573699e+02
+1.419419332145672570e+02 1.295023730194430023e+01 1.603233501576311824e+02
+1.419691917782572261e+02 1.306002751694098762e+01 1.795810627006604818e+02
+1.419964151231848462e+02 1.316988410400848331e+01 1.988348597574129712e+02
+1.420237546355382676e+02 1.328012631415920630e+01 2.180598364945426511e+02
+1.420513638690437119e+02 1.339100797780792007e+01 2.372353262184736309e+02
+1.420791023930002552e+02 1.350267874436235438e+01 2.563526369343516080e+02
+1.421070435122802280e+02 1.361508101042110219e+01 2.754141011396012573e+02
+1.421352209389564223e+02 1.372792289530895005e+01 2.944398496581208065e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_034.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_034.csv
new file mode 100644
index 000000000..10042ec69
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/cs_034.csv
@@ -0,0 +1,14 @@
+1.414172887582813871e+02 1.223699813103611511e+01 5.000000000000000000e+01
+1.414656033841380349e+02 1.236751566127111879e+01 6.500169029896427730e+01
+1.415096545641805221e+02 1.248652736902454308e+01 8.129705284827895184e+01
+1.415509002388825479e+02 1.259766424110651073e+01 9.835172873318882125e+01
+1.415904452753921987e+02 1.270428671670574339e+01 1.158059809183393156e+02
+1.416291725107679440e+02 1.280822963963623451e+01 1.334793701595174866e+02
+1.416673732839587672e+02 1.291100872455132276e+01 1.512497455660028436e+02
+1.417054254961070114e+02 1.301330985254472594e+01 1.690579391115898886e+02
+1.417434273864518843e+02 1.311539846091657147e+01 1.868826524975249583e+02
+1.417814041758358883e+02 1.321734225860977574e+01 2.047184727356323322e+02
+1.418193875637743417e+02 1.331922626473877358e+01 2.225586476723623832e+02
+1.418575217394846675e+02 1.342108672998817021e+01 2.403970306451967929e+02
+1.418956254596050144e+02 1.352312244361923277e+01 2.582242583315830871e+02
+1.419338636543078565e+02 1.362544073312059645e+01 2.760286183999278933e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_000.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_000.csv
new file mode 100644
index 000000000..01e075fda
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_000.csv
@@ -0,0 +1,35 @@
+1.425490222155818003e+02 2.383285145581523423e+01 5.000000000000000000e+01
+1.426950276644475935e+02 2.361086083778018363e+01 5.000000000000000000e+01
+1.429221797868632109e+02 2.332827264603417916e+01 5.000000000000000000e+01
+1.432907543711594656e+02 2.297909830537750864e+01 5.000000000000000000e+01
+1.437154361130643849e+02 2.260562386562709136e+01 5.000000000000000000e+01
+1.441007563287678579e+02 2.222150860771508718e+01 5.000000000000000000e+01
+1.445429365015608596e+02 2.182876541696778006e+01 5.000000000000000000e+01
+1.450068869681998933e+02 2.146190065111038336e+01 5.000000000000000000e+01
+1.453577831767065334e+02 2.105784550380580100e+01 5.000000000000000000e+01
+1.455952150508406646e+02 2.066086821975643417e+01 5.000000000000000000e+01
+1.457939649787660983e+02 2.023978990131380229e+01 5.000000000000000000e+01
+1.460004245552748046e+02 1.982689892222083472e+01 5.000000000000000000e+01
+1.462138234147023184e+02 1.940053310875810766e+01 5.000000000000000000e+01
+1.465456257448776114e+02 1.853989862749293849e+01 5.000000000000000000e+01
+1.466540728028636238e+02 1.811316786382399968e+01 5.000000000000000000e+01
+1.467159454811783519e+02 1.766659467640987202e+01 5.000000000000000000e+01
+1.467249707015076297e+02 1.720369504294813368e+01 5.000000000000000000e+01
+1.466852985076440348e+02 1.674249650677199952e+01 5.000000000000000000e+01
+1.466173724304344432e+02 1.626264452489800405e+01 5.000000000000000000e+01
+1.465375640875109013e+02 1.583977507444341803e+01 5.000000000000000000e+01
+1.464357230386359561e+02 1.541506013516966433e+01 5.000000000000000000e+01
+1.463247736205888145e+02 1.500912803278064622e+01 5.000000000000000000e+01
+1.461879164240309876e+02 1.464409619057272316e+01 5.000000000000000000e+01
+1.459201343386703513e+02 1.425912546108947865e+01 5.000000000000000000e+01
+1.455835474480892344e+02 1.394882264000774441e+01 5.000000000000000000e+01
+1.452896637080405355e+02 1.369021819749838009e+01 5.000000000000000000e+01
+1.449671382814323124e+02 1.341865918841377159e+01 5.000000000000000000e+01
+1.446338205595895090e+02 1.319557798800630444e+01 5.000000000000000000e+01
+1.441557274490049281e+02 1.294382754537140734e+01 5.000000000000000000e+01
+1.437348927012627655e+02 1.274712647450814273e+01 5.000000000000000000e+01
+1.432126908087810193e+02 1.252214746589538485e+01 5.000000000000000000e+01
+1.425139052003446807e+02 1.230379858829311601e+01 5.000000000000000000e+01
+1.420816261120621107e+02 1.223600687419185995e+01 5.000000000000000000e+01
+1.417639620451518283e+02 1.222971837668900896e+01 5.000000000000000000e+01
+1.414172887582813871e+02 1.223699813103611511e+01 5.000000000000000000e+01
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_001.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_001.csv
new file mode 100644
index 000000000..8241b74bf
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_001.csv
@@ -0,0 +1,35 @@
+1.424028142327582600e+02 2.380583158647957021e+01 6.564918219823888990e+01
+1.425503234275046793e+02 2.358094757608811420e+01 6.419666327438048370e+01
+1.427703372938599955e+02 2.329479567975349497e+01 6.397224636693390210e+01
+1.431255903031651542e+02 2.294204626919931300e+01 6.377766250414728688e+01
+1.435547584828978813e+02 2.256927939906812597e+01 6.372046496288515982e+01
+1.439342711016555540e+02 2.218525463214796645e+01 6.459347021490289364e+01
+1.443675038728798654e+02 2.178756054323338631e+01 6.440079362996274881e+01
+1.448232985120052092e+02 2.141913301732793684e+01 6.348535696488826829e+01
+1.451811015924173205e+02 2.101601235753024355e+01 6.337314479309289084e+01
+1.454225167464360595e+02 2.062244685450763271e+01 6.362996811321310986e+01
+1.456274454012095418e+02 2.020159264225888407e+01 6.407056183070253041e+01
+1.458447330204320451e+02 1.979432438018547202e+01 6.379461426620873965e+01
+1.460565885630493597e+02 1.936732238342409218e+01 6.442948390834639838e+01
+1.463842501593039458e+02 1.850610301781295064e+01 6.330304444010740639e+01
+1.464817916079417444e+02 1.807976978122973577e+01 6.231744479224488487e+01
+1.465382304632978219e+02 1.763218718374299954e+01 6.130897100110443887e+01
+1.465387409173080471e+02 1.717028990378180708e+01 6.133625316879936662e+01
+1.464991819940116784e+02 1.670948509105539515e+01 6.129385561555156414e+01
+1.464288281520987312e+02 1.622875457572929037e+01 6.189408994992010093e+01
+1.463480963094877723e+02 1.581448284586073960e+01 6.236930398757008476e+01
+1.462465129089623304e+02 1.540098934649019391e+01 6.248972098000723463e+01
+1.461351518886950487e+02 1.501076078423859883e+01 6.264825056279811832e+01
+1.460019779848153405e+02 1.466915345183881492e+01 6.248757325224844550e+01
+1.457440122521176420e+02 1.430261441885063078e+01 6.238834810555974997e+01
+1.454241881208316727e+02 1.400099789008534934e+01 6.331733125703959075e+01
+1.451513544911070710e+02 1.375666806989713109e+01 6.448976308047015493e+01
+1.448457190949354185e+02 1.350265994380561807e+01 6.494462676804923262e+01
+1.445236088326304866e+02 1.329222514186677451e+01 6.510141682092850601e+01
+1.440610375287527063e+02 1.305026388938619597e+01 6.565288277611027468e+01
+1.436643167887194750e+02 1.286272901881399910e+01 6.632369513786092341e+01
+1.431728739932549104e+02 1.264971234737769912e+01 6.670084118500236059e+01
+1.425041791995312224e+02 1.244582286355832856e+01 6.641774919158372370e+01
+1.420987377838664258e+02 1.237990879306447489e+01 6.660923681861059720e+01
+1.417981723257915405e+02 1.236849567102166247e+01 6.665539916185529989e+01
+1.414656033841380349e+02 1.236751566127111879e+01 6.500169029896427730e+01
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_002.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_002.csv
new file mode 100644
index 000000000..443779c7a
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_002.csv
@@ -0,0 +1,35 @@
+1.422738392214201326e+02 2.378177258143302808e+01 8.287767851090505644e+01
+1.424199860545579099e+02 2.355376890425125325e+01 7.985266684989085206e+01
+1.426317316224411798e+02 2.326416909897612229e+01 7.939663044733731567e+01
+1.429732674472086558e+02 2.290794851323387959e+01 7.912269043221247955e+01
+1.434038661430285799e+02 2.253522297464332524e+01 7.864080699815127673e+01
+1.437794152301758857e+02 2.215116363940460431e+01 8.055742490979297088e+01
+1.442071429719855757e+02 2.174970012332288150e+01 8.068303979374110213e+01
+1.446538086283993039e+02 2.137989670970771527e+01 7.892039432639880658e+01
+1.450148810324053841e+02 2.097639708928135960e+01 7.818151698455199039e+01
+1.452591179255904308e+02 2.058622960035993543e+01 7.851175899792707469e+01
+1.454707570882337961e+02 2.016575585044343910e+01 7.939128484278998599e+01
+1.456984939682270976e+02 1.976366742922073882e+01 7.873420483312006013e+01
+1.459093848585411592e+02 1.933610537025263554e+01 8.003586041136053097e+01
+1.462316770451654122e+02 1.847423011572098872e+01 7.776644212398664990e+01
+1.463177575062311462e+02 1.804772597092005171e+01 7.587914698757120391e+01
+1.463666026962067974e+02 1.759904212131289114e+01 7.366875476113321497e+01
+1.463583824758821095e+02 1.713773809877298149e+01 7.371478489244189802e+01
+1.463190416188099050e+02 1.667731781383035994e+01 7.365957000955584988e+01
+1.462465428250898754e+02 1.619607734988314718e+01 7.488510598614851688e+01
+1.461653055927586422e+02 1.578991563361119077e+01 7.585016624548359232e+01
+1.460637933663211641e+02 1.538727420864420559e+01 7.604990911941929710e+01
+1.459516915965498072e+02 1.501216403545275746e+01 7.629834695269104827e+01
+1.458224757266343943e+02 1.469342241764009493e+01 7.602750583170993082e+01
+1.455783917172335009e+02 1.434323701170317023e+01 7.645029315543222026e+01
+1.452789524534491932e+02 1.404860250118811571e+01 7.859432859318043540e+01
+1.450257047266648271e+02 1.381706870110990337e+01 8.057771019994387984e+01
+1.447354361172937445e+02 1.357884362808945156e+01 8.135797058874278775e+01
+1.444246068766863118e+02 1.337899542199452441e+01 8.178386133376712053e+01
+1.439775906483682490e+02 1.314389320312907827e+01 8.298908534912105495e+01
+1.436027132108494584e+02 1.296345585632888309e+01 8.421200107685244518e+01
+1.431382410392834288e+02 1.276048347149498419e+01 8.493635658937317601e+01
+1.424955892209671333e+02 1.257112119207866030e+01 8.446018163667034173e+01
+1.421141997837485746e+02 1.250993565742404279e+01 8.459105427411522271e+01
+1.418294615890292221e+02 1.249524149958354968e+01 8.451079501174578468e+01
+1.415096545641805221e+02 1.248652736902454308e+01 8.129705284827895184e+01
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_003.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_003.csv
new file mode 100644
index 000000000..b2e329dc7
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_003.csv
@@ -0,0 +1,35 @@
+1.421571945848913288e+02 2.376017746608198067e+01 1.010471980323516732e+02
+1.423009061290045452e+02 2.352915789054708640e+01 9.647565715874777936e+01
+1.425037048426328852e+02 2.323561751534559505e+01 9.580173494607309692e+01
+1.428323963789607376e+02 2.287616823156880130e+01 9.564273431552581428e+01
+1.432612537479825221e+02 2.250281679549917513e+01 9.444357765093484147e+01
+1.436337244790888406e+02 2.211926397188527815e+01 9.746904690488548795e+01
+1.440587964382282848e+02 2.171427299350833806e+01 9.821390316006142029e+01
+1.445000446655516555e+02 2.134351847766458476e+01 9.611688155294520186e+01
+1.448629272110416366e+02 2.094034825877401929e+01 9.464450609478572574e+01
+1.451080481387585905e+02 2.055206222489489321e+01 9.478816820001247834e+01
+1.453249586544576459e+02 2.013220687667340059e+01 9.589728276511185356e+01
+1.455619518345449421e+02 1.973485907299042452e+01 9.468975780637693163e+01
+1.457721367011064615e+02 1.930681110896619757e+01 9.665477920513865229e+01
+1.460882032955373973e+02 1.844408880019829056e+01 9.327106897251961470e+01
+1.461634182679342473e+02 1.801743864620011948e+01 9.070377910848658587e+01
+1.462050671357360159e+02 1.756715675151916045e+01 8.750380946342330901e+01
+1.461885473984391695e+02 1.710719964898912693e+01 8.771860158304485822e+01
+1.461493134080428149e+02 1.664679639048008752e+01 8.763710605918498686e+01
+1.460745694614201682e+02 1.616480430653439271e+01 8.942066133144291484e+01
+1.459932468090107704e+02 1.576690201002860015e+01 9.088001741422807811e+01
+1.458915991747544467e+02 1.537399407023207765e+01 9.111576406559846930e+01
+1.457784916533544788e+02 1.501359281313519922e+01 9.140152555331890483e+01
+1.456544987879060500e+02 1.471572005513616865e+01 9.120425813573055507e+01
+1.454276315984294854e+02 1.438027276525142995e+01 9.243580564779591668e+01
+1.451483975552738457e+02 1.409138067309604025e+01 9.550731439539629264e+01
+1.449122240224284610e+02 1.387146612374378485e+01 9.793968569246800371e+01
+1.446356211853627940e+02 1.364763936290839119e+01 9.892291732822874906e+01
+1.443358202393967247e+02 1.345688294344574309e+01 9.964784251327469633e+01
+1.439033406034134543e+02 1.322726015132251831e+01 1.014343370028930593e+02
+1.435479685800604273e+02 1.305301381158891871e+01 1.030675539854802878e+02
+1.431072712018429343e+02 1.285957859199700160e+01 1.040523688939838252e+02
+1.424878594594029835e+02 1.268387763238674637e+01 1.035051799442988312e+02
+1.421285321897495066e+02 1.263015232003222721e+01 1.034070307890203253e+02
+1.418587936478273548e+02 1.261412786178417278e+01 1.030559662411102835e+02
+1.415509002388825479e+02 1.259766424110651073e+01 9.835172873318882125e+01
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_004.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_004.csv
new file mode 100644
index 000000000..f0c59755c
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_004.csv
@@ -0,0 +1,35 @@
+1.420491126371803148e+02 2.374003455915855554e+01 1.197828856378801419e+02
+1.421902836882852341e+02 2.350564358331196146e+01 1.137202906377070804e+02
+1.423833625687698827e+02 2.320908219595713717e+01 1.128474368891884865e+02
+1.427004216523944251e+02 2.284615110453242437e+01 1.129626914761209804e+02
+1.431259217452767984e+02 2.247185053099575569e+01 1.109434097609975254e+02
+1.434952236968341310e+02 2.208871231281649727e+01 1.150416891011391556e+02
+1.439191769883268250e+02 2.168115811833089168e+01 1.165530532958618721e+02
+1.443602554802524196e+02 2.131060833917872799e+01 1.146404699145080599e+02
+1.447273868027944843e+02 2.090791071301387660e+01 1.126770554581633093e+02
+1.449716155359472509e+02 2.052135602071240328e+01 1.124872753369715213e+02
+1.451914004909330345e+02 2.010124533512028933e+01 1.135552222644245006e+02
+1.454354332889188299e+02 1.970796413706496608e+01 1.115669539763125897e+02
+1.456455852836762972e+02 1.927959433490429575e+01 1.142246272548442221e+02
+1.459549690279521315e+02 1.841591293139752494e+01 1.097996726648133574e+02
+1.460210983711512824e+02 1.798940755242289313e+01 1.068648878556460744e+02
+1.460570569093264339e+02 1.753810329590255535e+01 1.030101547584775119e+02
+1.460338421851055841e+02 1.707921829464246599e+01 1.036421239798961125e+02
+1.459952214398837782e+02 1.661883550732222758e+01 1.035953601775527915e+02
+1.459174675024480621e+02 1.613634576740698634e+01 1.058302798211145728e+02
+1.458357741452260541e+02 1.574533865649645037e+01 1.076670010748382822e+02
+1.457345546327448176e+02 1.536199774307766219e+01 1.079905946630481992e+02
+1.456198864909210897e+02 1.501443256075784305e+01 1.082509979512046954e+02
+1.455026579409243368e+02 1.473595253476700861e+01 1.082655980287016177e+02
+1.452931028635538837e+02 1.441283777195720361e+01 1.101482441841789210e+02
+1.450313598487790330e+02 1.412956172395919552e+01 1.136627701574256832e+02
+1.448092125178200718e+02 1.392068173619286853e+01 1.162366150430419083e+02
+1.445456663769368504e+02 1.370974109482919623e+01 1.174000247474475742e+02
+1.442555066579864729e+02 1.352698443697594577e+01 1.183656771897947948e+02
+1.438357074839163943e+02 1.330285121289933414e+01 1.205813980619719530e+02
+1.434976643042949718e+02 1.313521145963837533e+01 1.224726234329964001e+02
+1.430785912318091846e+02 1.295124846683261488e+01 1.236586309969446233e+02
+1.424806480059173168e+02 1.278877521321053479e+01 1.231006258622609693e+02
+1.421420871431957949e+02 1.274391082211758253e+01 1.227178507188435646e+02
+1.418870495268479033e+02 1.272829741856182650e+01 1.219810130588852672e+02
+1.415904452753921987e+02 1.270428671670574339e+01 1.158059809183393156e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_005.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_005.csv
new file mode 100644
index 000000000..e95caaca3
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_005.csv
@@ -0,0 +1,35 @@
+1.419466831957552415e+02 2.372082527428129239e+01 1.388590170288300101e+02
+1.420852533675153495e+02 2.348365080597844567e+01 1.313519712567032229e+02
+1.422685842231707340e+02 2.318306234376309050e+01 1.303005583049326219e+02
+1.425751237294695954e+02 2.281742285059511488e+01 1.308245261111789262e+02
+1.429967169353880934e+02 2.244207094357269838e+01 1.279810404399827917e+02
+1.433626055277306648e+02 2.205924365396402109e+01 1.331121298912815405e+02
+1.437860012956682851e+02 2.164934028765681973e+01 1.354267557803853208e+02
+1.442313048891216170e+02 2.127997029915853489e+01 1.340454575838178926e+02
+1.446066169610689656e+02 2.087869496438514361e+01 1.318879436707411514e+02
+1.448498127928540384e+02 2.049421778993738741e+01 1.313841688053453254e+02
+1.450700447488721068e+02 2.007285874139316206e+01 1.322050504875995500e+02
+1.453187463527520151e+02 1.968294102337345564e+01 1.292397974832790339e+02
+1.455299516994665794e+02 1.925499061330265960e+01 1.326526750866150621e+02
+1.458331016701284284e+02 1.839038349180915688e+01 1.273289058136387979e+02
+1.458915126073212605e+02 1.796367762902972487e+01 1.242239569406115152e+02
+1.459237306732036075e+02 1.751171765778047984e+01 1.199983511436262518e+02
+1.458971429551000085e+02 1.705372538619895195e+01 1.213834570236546426e+02
+1.458587884203600140e+02 1.659403732623780670e+01 1.213430223734806646e+02
+1.457791508185991631e+02 1.611054611027501338e+01 1.241220980412725652e+02
+1.456944409801856466e+02 1.572608926827945375e+01 1.260671231624809252e+02
+1.455925954885558156e+02 1.535096788137497015e+01 1.263451379206975957e+02
+1.454773913251669057e+02 1.501528210086563320e+01 1.266981855664752743e+02
+1.453679051574207222e+02 1.475372161622893330e+01 1.269607667816008956e+02
+1.451728798244004111e+02 1.444235002073901342e+01 1.290972478510827557e+02
+1.449254587262268501e+02 1.416393213251371286e+01 1.326885988671469647e+02
+1.447163196717286837e+02 1.396489649022562141e+01 1.353073036995859582e+02
+1.444639695923373779e+02 1.376604243514563741e+01 1.365482346601808388e+02
+1.441819676603577420e+02 1.359128944422482199e+01 1.376624377159344874e+02
+1.437729151875620914e+02 1.337315367485616235e+01 1.401669172110872523e+02
+1.434503326721407177e+02 1.321246576143770035e+01 1.422126512921470578e+02
+1.430512630510710892e+02 1.303851186922934779e+01 1.435324911864663875e+02
+1.424737482617983346e+02 1.288904711583585083e+01 1.429930491554175660e+02
+1.421552153580163065e+02 1.285375493522298385e+01 1.423093220689911504e+02
+1.419146347966725159e+02 1.283989236002913614e+01 1.411053522463573699e+02
+1.416291725107679440e+02 1.280822963963623451e+01 1.334793701595174866e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_006.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_006.csv
new file mode 100644
index 000000000..200f6cc8a
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_006.csv
@@ -0,0 +1,35 @@
+1.418481617778002146e+02 2.370180304492677337e+01 1.581502692811891109e+02
+1.419838162579786740e+02 2.346230036051083445e+01 1.492117174639985535e+02
+1.421570734800624791e+02 2.315820575206182497e+01 1.479944771409308828e+02
+1.424546449870456684e+02 2.279022236829691295e+01 1.490611644264256768e+02
+1.428729854965683330e+02 2.241334079204509777e+01 1.454640583238528393e+02
+1.432355153172292717e+02 2.203079174472971857e+01 1.516187500853236259e+02
+1.436578287938346818e+02 2.161918382676546102e+01 1.546997979634813021e+02
+1.441096654892457423e+02 2.125081624982933093e+01 1.539831452698100236e+02
+1.444970448117251749e+02 2.085251547100811820e+01 1.518723140341488147e+02
+1.447403637003594383e+02 2.046906789722364906e+01 1.511269495974794097e+02
+1.449594725782932585e+02 2.004730252231525256e+01 1.516249292707142899e+02
+1.452113834959943972e+02 1.966021721447147641e+01 1.475881199813816238e+02
+1.454248783362271809e+02 1.923249525011630112e+01 1.518000957460238851e+02
+1.457225055026155758e+02 1.836708699578744231e+01 1.457096186024535598e+02
+1.457747006803896852e+02 1.794072493108175337e+01 1.426167092694804239e+02
+1.458048195310087181e+02 1.748841484953206304e+01 1.382073024535167178e+02
+1.457757815666816441e+02 1.703166807281466788e+01 1.403968114572878392e+02
+1.457387896469865325e+02 1.657243654679090383e+01 1.404408653521254280e+02
+1.456569731243701824e+02 1.608830908831047068e+01 1.437383200726476389e+02
+1.455686638049522799e+02 1.570849011142251861e+01 1.457472004005219048e+02
+1.454644225439354557e+02 1.534123460927918892e+01 1.458420485475951693e+02
+1.453497316676918274e+02 1.501623709287206587e+01 1.463720905877226812e+02
+1.452475768802443383e+02 1.476939402276950375e+01 1.467983584600364679e+02
+1.450641698987028576e+02 1.446857077443638318e+01 1.489025242544941818e+02
+1.448291999259622571e+02 1.419499428468104618e+01 1.523706574806315928e+02
+1.446315602243493004e+02 1.400540071472505588e+01 1.549199417664838165e+02
+1.443891154764748421e+02 1.381753477598377167e+01 1.561863674645107380e+02
+1.441134984161656405e+02 1.365107179546406613e+01 1.573548243456611431e+02
+1.437130999976796204e+02 1.344004214542127507e+01 1.600084925616346823e+02
+1.434043374715913330e+02 1.328746701496850413e+01 1.620962335598452455e+02
+1.430245112540292780e+02 1.312386067061877348e+01 1.635173005711901624e+02
+1.424669607315792916e+02 1.298772976069845875e+01 1.629831974917433115e+02
+1.421681128342322893e+02 1.296179463253197284e+01 1.620256057940793539e+02
+1.419419332145672570e+02 1.295023730194430023e+01 1.603233501576311824e+02
+1.416673732839587672e+02 1.291100872455132276e+01 1.512497455660028436e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_007.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_007.csv
new file mode 100644
index 000000000..7a0890992
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_007.csv
@@ -0,0 +1,35 @@
+1.417521664255501435e+02 2.368352537619229992e+01 1.775816271088999372e+02
+1.418848464919363721e+02 2.344137301907628768e+01 1.672208814669743333e+02
+1.420479132464409133e+02 2.313377388170200177e+01 1.658476018595323467e+02
+1.423378778993698859e+02 2.276308492438332109e+01 1.675510520662535896e+02
+1.427539254841210834e+02 2.238615763563143801e+01 1.633162756533105266e+02
+1.431131379219834230e+02 2.200388150117671415e+01 1.704874764514400738e+02
+1.435343565108487383e+02 2.158931627466393977e+01 1.743030952260513686e+02
+1.439922442100790931e+02 2.122315924674665411e+01 1.742180494334838272e+02
+1.443954011592829829e+02 2.082741080444051818e+01 1.723265485567080759e+02
+1.446400310573370120e+02 2.044636488825955567e+01 1.714294637629130307e+02
+1.448583843983348913e+02 2.002319031616895373e+01 1.716272898639221012e+02
+1.451123662692259302e+02 1.963912406960003665e+01 1.664702994781509631e+02
+1.453297660735019292e+02 1.921144677673206047e+01 1.715356338458212804e+02
+1.456225973217213721e+02 1.834590627401278340e+01 1.647936396866350321e+02
+1.456693933211675756e+02 1.791989870046991840e+01 1.618032870327474484e+02
+1.456980265618671240e+02 1.746735083574629499e+01 1.572774641360243777e+02
+1.456684328449661905e+02 1.701153696476263022e+01 1.603672363739096625e+02
+1.456331554888231778e+02 1.655327684993002890e+01 1.605140767761561449e+02
+1.455476604191885031e+02 1.606828306165035869e+01 1.642321412428196652e+02
+1.454555593470143151e+02 1.569303261511030456e+01 1.663150576514978241e+02
+1.453482473753207671e+02 1.533185898329065466e+01 1.661925317687193342e+02
+1.452339990952778237e+02 1.501659170487335260e+01 1.668894922290417639e+02
+1.451382122179357737e+02 1.478385350550768784e+01 1.673769162682535807e+02
+1.449650121593919323e+02 1.449269472224339594e+01 1.693190293337041226e+02
+1.447410048286297410e+02 1.422365931282279128e+01 1.725327140344698478e+02
+1.445530569344047080e+02 1.404282158361150401e+01 1.749103252290911144e+02
+1.443192092209552015e+02 1.386553447641078129e+01 1.761474338887941258e+02
+1.440485533126512507e+02 1.370769489138001518e+01 1.773023315493402379e+02
+1.436548077037697055e+02 1.350545790322905226e+01 1.799638811019889033e+02
+1.433587175316511662e+02 1.336179380151988383e+01 1.820212732852790793e+02
+1.429976190245252212e+02 1.320959524135744978e+01 1.834795582682481836e+02
+1.424601276337230331e+02 1.308700356527340070e+01 1.829369977114399148e+02
+1.421809780549491506e+02 1.306947992969263694e+01 1.817659462436202489e+02
+1.419691917782572261e+02 1.306002751694098762e+01 1.795810627006604818e+02
+1.417054254961070114e+02 1.301330985254472594e+01 1.690579391115898886e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_008.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_008.csv
new file mode 100644
index 000000000..a4445da62
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_008.csv
@@ -0,0 +1,35 @@
+1.416584002533734576e+02 2.366558031878759039e+01 1.971288866904174313e+02
+1.417876789307759964e+02 2.342073631062324424e+01 1.853356690531163053e+02
+1.419408837540142372e+02 2.310903795056094623e+01 1.838292594961236546e+02
+1.422242648199541577e+02 2.273720184946835232e+01 1.862673799030836790e+02
+1.426395770397569436e+02 2.235923568699604758e+01 1.814956238710160221e+02
+1.429956072447500901e+02 2.197719557343162577e+01 1.896843403108816233e+02
+1.434151307946973191e+02 2.156026997848408300e+01 1.941997544272934704e+02
+1.438775655916525977e+02 2.119531979178656300e+01 1.946180504515526479e+02
+1.442984416046258787e+02 2.080393555794156413e+01 1.930504671335751539e+02
+1.445462613890469470e+02 2.042500002354254462e+01 1.920905590493071600e+02
+1.447644158111330910e+02 2.000116420442324028e+01 1.920366679064426307e+02
+1.450209955043611671e+02 1.961952634068421375e+01 1.857914223935618452e+02
+1.452431993895381197e+02 1.919317801314291216e+01 1.917361973560386161e+02
+1.455320495501674429e+02 1.832657225208857099e+01 1.844179541047783175e+02
+1.455743298966854979e+02 1.790096152505919846e+01 1.816057553374368467e+02
+1.456018221912667343e+02 1.744823830907984785e+01 1.769993149718185350e+02
+1.455728436411753250e+02 1.699387141593386730e+01 1.810325653406281674e+02
+1.455392152075364720e+02 1.653609620792786572e+01 1.812633926144501686e+02
+1.454489991624595575e+02 1.605007910618477496e+01 1.853585503079223429e+02
+1.453521237914083883e+02 1.567829694564913900e+01 1.874660014326872499e+02
+1.452410948143868268e+02 1.532349315430714398e+01 1.871137593025682122e+02
+1.451274582118910530e+02 1.501673316274685988e+01 1.879785004584123840e+02
+1.450369236702498199e+02 1.479714707199616086e+01 1.884422835150923277e+02
+1.448729730334285364e+02 1.451498862472477747e+01 1.901480625402696205e+02
+1.446587448833557801e+02 1.425029665796704315e+01 1.930196468488175014e+02
+1.444791881115376100e+02 1.407794612644151577e+01 1.951584666976674214e+02
+1.442525296617353661e+02 1.391124228850649125e+01 1.963040171677887713e+02
+1.439856732041088208e+02 1.376244688760934309e+01 1.973921405519312486e+02
+1.435967034305974153e+02 1.357032691254131684e+01 1.999480563459751750e+02
+1.433123883686095894e+02 1.343722547739289652e+01 2.018762603279025143e+02
+1.429699162438040503e+02 1.329786332800797588e+01 2.032927401820269608e+02
+1.424531063797831507e+02 1.318894766374665828e+01 2.027237930119520399e+02
+1.421939570999521152e+02 1.317803800702850658e+01 2.014467478327428580e+02
+1.419964151231848462e+02 1.316988410400848331e+01 1.988348597574129712e+02
+1.417434273864518843e+02 1.311539846091657147e+01 1.868826524975249583e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_009.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_009.csv
new file mode 100644
index 000000000..5d1209688
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_009.csv
@@ -0,0 +1,35 @@
+1.415670821562904393e+02 2.364863746711049330e+01 2.168064974586916662e+02
+1.416925893127529150e+02 2.340045231417608207e+01 2.035691193086996407e+02
+1.418368811892195822e+02 2.308554967516084844e+01 2.020151019496409504e+02
+1.421149104246553065e+02 2.271143825372358549e+01 2.052497225381591193e+02
+1.425296788765396911e+02 2.233389239319414443e+01 1.999899182804657869e+02
+1.428822285705966522e+02 2.195200892019663641e+01 2.091691416848433107e+02
+1.432999253560172406e+02 2.153278553598301670e+01 2.143742965625837087e+02
+1.437640703273397946e+02 2.116837802234107002e+01 2.151030213933850348e+02
+1.442039435036465989e+02 2.078095193367359528e+01 2.139042983100694926e+02
+1.444567521435767503e+02 2.040448242813148028e+01 2.129677306421647245e+02
+1.446759679523905788e+02 1.998030171724233739e+01 2.127299038596873402e+02
+1.449358176338427029e+02 1.960112307649112395e+01 2.054367424977694441e+02
+1.451639925037447938e+02 1.917581879003343914e+01 2.122793623719055631e+02
+1.454493263318062475e+02 1.830877263661225740e+01 2.044436874951792049e+02
+1.454878985602016712e+02 1.788360742833549466e+01 2.018667159868662111e+02
+1.455145061041530425e+02 1.743075596826516005e+01 1.972023876701146321e+02
+1.454869648328273968e+02 1.697837938947479230e+01 2.021987510443680662e+02
+1.454542260995244192e+02 1.652041955765585612e+01 2.024643854746803413e+02
+1.453581158056484242e+02 1.603319491997606505e+01 2.068949134663733673e+02
+1.452553615212318050e+02 1.566534633772089080e+01 2.089910710380473233e+02
+1.451407573910528583e+02 1.531556207453544438e+01 2.084245499188238853e+02
+1.450277065062447264e+02 1.501711585376561686e+01 2.094490699014056361e+02
+1.449415506501380548e+02 1.480957625096050734e+01 2.098339016840126590e+02
+1.447864584739641316e+02 1.453585586492545900e+01 2.112698411634271451e+02
+1.445810955496611143e+02 1.427535248654553968e+01 2.137400125841608656e+02
+1.444085264605554926e+02 1.411184654728957888e+01 2.155664999608283097e+02
+1.441877799188024767e+02 1.395555963348336626e+01 2.165729395485165298e+02
+1.439237781355305970e+02 1.381628056555454975e+01 2.175488250247806548e+02
+1.435377397374133182e+02 1.363610962295126150e+01 2.198663026646683818e+02
+1.432644995913979642e+02 1.351515516390578853e+01 2.215689315529821499e+02
+1.429409028473849332e+02 1.339026396340304714e+01 2.228506836010964491e+02
+1.424458008582172965e+02 1.329495993436961498e+01 2.222451822217457220e+02
+1.422072176535858432e+02 1.328857789625689456e+01 2.209897209987867654e+02
+1.420237546355382676e+02 1.328012631415920630e+01 2.180598364945426511e+02
+1.417814041758358883e+02 1.321734225860977574e+01 2.047184727356323322e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_010.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_010.csv
new file mode 100644
index 000000000..9c55f70f3
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_010.csv
@@ -0,0 +1,35 @@
+1.414790105756601406e+02 2.363161641117148903e+01 2.366358375071824298e+02
+1.416008804501331610e+02 2.338078582521518811e+01 2.219895057014685733e+02
+1.417379719479734206e+02 2.306309176197117239e+01 2.205106933838747807e+02
+1.420112518320736967e+02 2.268756939214065582e+01 2.245939631521654860e+02
+1.424248477862895186e+02 2.230959261098714563e+01 2.188093469403997915e+02
+1.427734881186774771e+02 2.192693388743415994e+01 2.289345189256571302e+02
+1.431887433194263792e+02 2.150532692646148902e+01 2.347893027590502300e+02
+1.436512726250401499e+02 2.114152695596020237e+01 2.356298045140516422e+02
+1.441103915380294609e+02 2.075812247130130572e+01 2.348058311486920218e+02
+1.443697602758247456e+02 2.038444068909634410e+01 2.339662278532996424e+02
+1.445917162034695878e+02 1.996098629556436066e+01 2.336322500478521533e+02
+1.448559273856850496e+02 1.958373639877330064e+01 2.253363668826299886e+02
+1.450907257458561332e+02 1.915962037656180073e+01 2.330771561394464868e+02
+1.453731120924635150e+02 1.829224043844505587e+01 2.247701160040059563e+02
+1.454087078508701438e+02 1.786757391324834643e+01 2.224712015990071166e+02
+1.454348324610070335e+02 1.741466975380912530e+01 2.177734384649070307e+02
+1.454088902246841997e+02 1.696370430354743064e+01 2.237134888962056607e+02
+1.453762691058733481e+02 1.650591468005102769e+01 2.239822713023461915e+02
+1.452730906600123717e+02 1.601729182231369464e+01 2.287138429911503579e+02
+1.451638005063957451e+02 1.565254159666183753e+01 2.307773191387909151e+02
+1.450454267117909808e+02 1.530793873359352197e+01 2.300012375984397295e+02
+1.449324767259267617e+02 1.501740218123640602e+01 2.311559225970565592e+02
+1.448505002543925002e+02 1.482136378758879935e+01 2.314482347102998290e+02
+1.447039375902542417e+02 1.455567814537616123e+01 2.325900910300166231e+02
+1.445061844472302823e+02 1.429987472739159138e+01 2.345861048512311129e+02
+1.443394209579425933e+02 1.414458879690427828e+01 2.360605412010123416e+02
+1.441238313414691277e+02 1.399963568857140039e+01 2.368786658570500947e+02
+1.438617055290251869e+02 1.387021834057523151e+01 2.376962318398602747e+02
+1.434770072997295642e+02 1.370382911856176911e+01 2.396424960448229911e+02
+1.432143050497107026e+02 1.359680387052000228e+01 2.410084913970301841e+02
+1.429100769248916549e+02 1.348840053813108852e+01 2.420306643326883886e+02
+1.424381778441905908e+02 1.340551900606732616e+01 2.414538070359509732e+02
+1.422207663860403102e+02 1.340138478658126431e+01 2.403710979911467405e+02
+1.420513638690437119e+02 1.339100797780792007e+01 2.372353262184736309e+02
+1.418193875637743417e+02 1.331922626473877358e+01 2.225586476723623832e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_011.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_011.csv
new file mode 100644
index 000000000..725f43db9
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_011.csv
@@ -0,0 +1,35 @@
+1.413947086575333856e+02 2.361520476900382803e+01 2.566404672514501613e+02
+1.415134520919196746e+02 2.336264713517084246e+01 2.406441883034274838e+02
+1.416466490982543291e+02 2.304219959677580576e+01 2.394312259381962349e+02
+1.419153595870994309e+02 2.266532704424624711e+01 2.443778679451841924e+02
+1.423261890677989925e+02 2.228658430080312414e+01 2.379977268551558041e+02
+1.426685094364733004e+02 2.190335046861340018e+01 2.489373036299281239e+02
+1.430806627500918751e+02 2.147929147834772223e+01 2.554041157499573558e+02
+1.435388267597119807e+02 2.111386984948876844e+01 2.561630692856433029e+02
+1.440164661805859794e+02 2.073514129922932270e+01 2.556863528853842524e+02
+1.442840126128710949e+02 2.036460345865389243e+01 2.550225162111749739e+02
+1.445111119927105676e+02 1.994177516728196053e+01 2.546929601515238915e+02
+1.447806733306129559e+02 1.956723348170392640e+01 2.454431568508431383e+02
+1.450218667241750552e+02 1.914489862434950140e+01 2.540549252898404973e+02
+1.453021009027063712e+02 1.827729372912343919e+01 2.453217534176822028e+02
+1.453351390328468824e+02 1.785312454568279961e+01 2.433240408122540543e+02
+1.453613607357656861e+02 1.740027083336961766e+01 2.386200576466449661e+02
+1.453370000257777690e+02 1.695061857523154458e+01 2.454844782886906103e+02
+1.453035097740060166e+02 1.649280795242157183e+01 2.457187566491208486e+02
+1.451923603786357546e+02 1.600209673970503488e+01 2.507252584727104932e+02
+1.450760265460013159e+02 1.564018250025153733e+01 2.527453563837247543e+02
+1.449534973307278563e+02 1.530051102884853442e+01 2.517488354354883597e+02
+1.448403022234854802e+02 1.501761031361904841e+01 2.530149853826861772e+02
+1.447626400309403607e+02 1.483266730217891904e+01 2.532188796617625997e+02
+1.446242351834806357e+02 1.457520566269389306e+01 2.540385970883573066e+02
+1.444322283872483581e+02 1.432362452621136661e+01 2.554833187333381659e+02
+1.442705282897983068e+02 1.417718149264483074e+01 2.565663718457243476e+02
+1.440594030487290524e+02 1.404365322986209641e+01 2.571686549022787744e+02
+1.437987701234916074e+02 1.392524011397849293e+01 2.577767228614127362e+02
+1.434138576554344127e+02 1.377421395845185970e+01 2.592155554060802842e+02
+1.431617015667471264e+02 1.368233645171287449e+01 2.601675223207049612e+02
+1.428776096788600398e+02 1.359171706907065413e+01 2.608433113771512808e+02
+1.424302594024193809e+02 1.351996409269422017e+01 2.603811879555591986e+02
+1.422345115166620815e+02 1.351607666730651580e+01 2.596149555446837098e+02
+1.420791023930002552e+02 1.350267874436235438e+01 2.563526369343516080e+02
+1.418575217394846675e+02 1.342108672998817021e+01 2.403970306451967929e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_012.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_012.csv
new file mode 100644
index 000000000..415aad63d
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_012.csv
@@ -0,0 +1,35 @@
+1.413146005727203658e+02 2.360018978996901140e+01 2.768363358690533573e+02
+1.414318182594046220e+02 2.334490851252062171e+01 2.595749703415003751e+02
+1.415642856313345703e+02 2.302315514885027525e+01 2.588010236785382858e+02
+1.418288673308650800e+02 2.264506439270925497e+01 2.646381830631709704e+02
+1.422350039908119186e+02 2.226432235455107289e+01 2.575841020395001806e+02
+1.425684737483242941e+02 2.188074971448529737e+01 2.692211234516882428e+02
+1.429757460775403217e+02 2.145301876416702669e+01 2.761892236274983929e+02
+1.434261025485704693e+02 2.108688419924656188e+01 2.766896171727822775e+02
+1.439211647695909164e+02 2.071178690084941465e+01 2.764932624182340533e+02
+1.441985549942239970e+02 2.034476714921890306e+01 2.760912283733947561e+02
+1.444329330892984444e+02 1.992304455180199696e+01 2.758587776093859816e+02
+1.447086502066499918e+02 1.955199381384612778e+01 2.656922149167161251e+02
+1.449573240818828026e+02 1.913040552504805092e+01 2.751858742339444461e+02
+1.452356910928510274e+02 1.826267135541584352e+01 2.660478060601764696e+02
+1.452664675655875044e+02 1.783900586713224357e+01 2.643665902229062112e+02
+1.452933323781966806e+02 1.738631114760547192e+01 2.596781728276359900e+02
+1.452702021804392132e+02 1.693784382920530263e+01 2.674417973451986654e+02
+1.452351641963364273e+02 1.647989859635180565e+01 2.676194838460274354e+02
+1.451145138923276363e+02 1.598792043933668872e+01 2.728640248967626007e+02
+1.449906810237141030e+02 1.562809282338812622e+01 2.748250921102873008e+02
+1.448638934907628197e+02 1.529320446139642087e+01 2.736087298750769037e+02
+1.447500689893710160e+02 1.501775444807039861e+01 2.749676256590189496e+02
+1.446768690045504684e+02 1.484363903189754019e+01 2.750884468548373434e+02
+1.445460002313500070e+02 1.459388892945176153e+01 2.755594703025102490e+02
+1.443586157499701983e+02 1.434721715689140886e+01 2.763971704276309538e+02
+1.442004673877785308e+02 1.421029544614492401e+01 2.770158853944825523e+02
+1.439934314477341388e+02 1.408869185555644066e+01 2.773732138754613175e+02
+1.437337768716292601e+02 1.398166483787501413e+01 2.777327045101418435e+02
+1.433480782748050615e+02 1.384750082274066862e+01 2.785563070251301383e+02
+1.431068868674651355e+02 1.377142468258294805e+01 2.790549389495273545e+02
+1.428438971666729458e+02 1.369857731071218332e+01 2.793873124224114690e+02
+1.424222071846481299e+02 1.363658659932373141e+01 2.791453329914800747e+02
+1.422484187646238638e+02 1.363203740244725815e+01 2.787642519211991043e+02
+1.421070435122802280e+02 1.361508101042110219e+01 2.754141011396012573e+02
+1.418956254596050144e+02 1.352312244361923277e+01 2.582242583315830871e+02
diff --git a/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_013.csv b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_013.csv
new file mode 100644
index 000000000..3fc6c28d4
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/sfc_sl/edge_013.csv
@@ -0,0 +1,35 @@
+1.412392085239082746e+02 2.358527856232895914e+01 2.972211723928129459e+02
+1.413567632096549289e+02 2.332842353452246442e+01 2.788014126516852684e+02
+1.414907205558824614e+02 2.300591260434455521e+01 2.785597704738625566e+02
+1.417524228108570412e+02 2.262691411833314703e+01 2.853447405231232210e+02
+1.421514187948531003e+02 2.224532085022255856e+01 2.775679030341558473e+02
+1.424737798371048143e+02 2.185920827562150492e+01 2.897901143002993081e+02
+1.428733096403061609e+02 2.142810545234420516e+01 2.971263111932937022e+02
+1.433132971007349283e+02 2.105892465055399043e+01 2.971940809753708663e+02
+1.438238522162172046e+02 2.068791066937871292e+01 2.971904886646627801e+02
+1.441124360604478056e+02 2.032550864823003067e+01 2.971366460771924380e+02
+1.443567284296235584e+02 1.990469652143689316e+01 2.971070839094896314e+02
+1.446397810729071978e+02 1.953669985970659440e+01 2.860610686640727067e+02
+1.448953978364338582e+02 1.911705870239350702e+01 2.964128956172802987e+02
+1.451725399522607347e+02 1.824927596943086527e+01 2.868979135013532868e+02
+1.452013041489430805e+02 1.782610637626887851e+01 2.855442046903894493e+02
+1.452293243831526013e+02 1.737366021086376477e+01 2.808888781283860681e+02
+1.452069954755805554e+02 1.692623769548365331e+01 2.895277644310283449e+02
+1.451696987495607516e+02 1.646801740617618393e+01 2.896279226336246779e+02
+1.450388401031049170e+02 1.597354370123832190e+01 2.950873000280860765e+02
+1.449065828356662848e+02 1.561669517395637818e+01 2.969642051422231361e+02
+1.447753800679360552e+02 1.528648925487853383e+01 2.955222084450724651e+02
+1.446609323546191774e+02 1.501838118697724767e+01 2.969720545585723812e+02
+1.445920409660130588e+02 1.485443773005243706e+01 2.970019827076467891e+02
+1.444679454690445652e+02 1.461248184051414434e+01 2.970892653767593856e+02
+1.442829734442618417e+02 1.437143269479685515e+01 2.972177807737390935e+02
+1.441280273511555947e+02 1.424495845989493681e+01 2.973365687322973940e+02
+1.439250274261490290e+02 1.413578019911118133e+01 2.974257074843957867e+02
+1.436662112846387913e+02 1.404030055583438319e+01 2.975103464389945884e+02
+1.432797557113773337e+02 1.392358934741329080e+01 2.976612369697547251e+02
+1.430506636777442679e+02 1.386274949098217668e+01 2.977635290048355614e+02
+1.428099680183551925e+02 1.380639334384850869e+01 2.978591131281486923e+02
+1.424141458179538517e+02 1.375325043218474619e+01 2.979063062208385304e+02
+1.422624248697162557e+02 1.374833419385435462e+01 2.978877532474808163e+02
+1.421352209389564223e+02 1.372792289530895005e+01 2.944398496581208065e+02
+1.419338636543078565e+02 1.362544073312059645e+01 2.760286183999278933e+02
diff --git a/openquake/sub/tests/slab/data/mariana/slab.ini b/openquake/sub/tests/slab/data/mariana/slab.ini
new file mode 100644
index 000000000..d04704005
--- /dev/null
+++ b/openquake/sub/tests/slab/data/mariana/slab.ini
@@ -0,0 +1,43 @@
+[main]
+
+profile_sd_topsl = 20
+edge_sd_topsl = 20
+
+# Supposed values
+agr = 4.0
+bgr = 1.0
+mmax = 6.5
+mmin = 6.0
+
+sampling = 5
+float_strike = -0.5
+float_dip = -1.0
+
+slab_thickness = 60.0
+hspa = 10.0
+vspa = 10.0
+
+profile_folder = ./sfc_sl
+catalogue_pickle_fname = ./mariana_full_2202.pkl
+
+# the file with labels identifying earthquakes belonging to a given class
+treg_fname = ./classified_up.hdf5
+label = slab
+
+# output folder
+out_hdf5_fname = ./ruptures/ruptures_inslab_slab.hdf5
+
+# output smoothing folder
+out_hdf5_smoothing_fname = ./smoothing/smoothing_inslab_slab.hdf5
+
+# List of dip angles for the virtual faults within the slab
+dips = [65, 115]
+
+# Dictionary of aspect-ratios with associated weights
+aspect_ratios = {2.0: 0.4, 4.0: 0.3, 6.0: 0.2, 8.0: 0.1}
+
+# Portion of the overall seismicity distributed uniformly
+uniform_fraction = 0.1
+
+# magnitude scaling relationship
+mag_scaling_relation = StrasserIntraslab
diff --git a/openquake/sub/tests/slab/rupture_cam_test.py b/openquake/sub/tests/slab/rupture_cam_test.py
new file mode 100644
index 000000000..cba0bfaec
--- /dev/null
+++ b/openquake/sub/tests/slab/rupture_cam_test.py
@@ -0,0 +1,110 @@
+# ------------------- The OpenQuake Model Building Toolkit --------------------
+# Copyright (C) 2024 GEM Foundation
+# _______ _______ __ __ _______ _______ ___ _
+# | || | | |_| || _ || || | | |
+# | _ || _ | ____ | || |_| ||_ _|| |_| |
+# | | | || | | ||____|| || | | | | _|
+# | |_| || |_| | | || _ | | | | |_
+# | || | | ||_|| || |_| | | | | _ |
+# |_______||____||_| |_| |_||_______| |___| |___| |_|
+#
+# This program is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Affero General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+# -----------------------------------------------------------------------------
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+# coding: utf-8
+
+"""
+"""
+
+import os
+import unittest
+import pathlib
+import tempfile
+
+from openquake.sub.slab.rupture import calculate_ruptures
+from openquake.sub.create_inslab_nrml import create
+from openquake.sub.build_complex_surface import build_complex_surface
+
+BASE_DATA_PATH = os.path.dirname(__file__)
+HERE = pathlib.Path(__file__).parent
+
+
+class RuptureCreationCAMTest(unittest.TestCase):
+ """
+ This set of tests check the construction of ruptures for inslab sources
+ using the Central America subduction zone.
+ """
+
+ def setUp(self):
+
+ ini_fname = pathlib.Path('./data/cam/test.ini')
+ self.ini_fname = HERE / ini_fname
+
+ # Prepare the input folder and the output folder
+ in_path = os.path.join(BASE_DATA_PATH, './data/cam/sp_cam/')
+ self.out_path = pathlib.Path(tempfile.mkdtemp())
+
+ # Create the complex surface. We use the profiles used for
+ # the subduction in CCARA
+ max_sampl_dist = 10.
+ build_complex_surface(in_path, max_sampl_dist, self.out_path,
+ upper_depth=50, lower_depth=200)
+ print(self.out_path)
+
+
+ """
+ def test(self):
+
+ kwargs = {'only_plt': False, 'profile_folder': self.out_path}
+ calculate_ruptures(self.ini_fname, **kwargs)
+
+ def step01(self):
+
+ kwargs = {'only_plt': False}
+ calculate_ruptures(self.ini_fname, **kwargs)
+
+ # check the existence of the rupture file
+ tmps = '../data/tmp/ruptures.hdf5'
+ rupture_hdf5_fname = os.path.abspath(os.path.join(BASE_DATA_PATH,
+ tmps))
+ self.assertTrue(os.path.exists(rupture_hdf5_fname))
+
+ def step02(self):
+ label = 'test'
+ tmps = '../data/tmp/ruptures.hdf5'
+ rupture_hdf5_fname = os.path.abspath(os.path.join(BASE_DATA_PATH,
+ tmps))
+ output_folder = os.path.join(BASE_DATA_PATH, '../tmp/')
+
+ # Create the tmp objects
+ out_path = pathlib.Path(tempfile.mkdtemp())
+ out_hdf5_fname = out_path / 'ruptures.hdf5'
+ out_hdf5_smoothing_fname = out_path / 'smoothing.hdf5'
+
+ # Create nrml
+ investigation_t = '1.'
+ create(label, rupture_hdf5_fname, output_folder, investigation_t)
+
+ def _steps(self):
+ for name in sorted(dir(self)):
+ if name.startswith("step"):
+ yield name, getattr(self, name)
+
+ def test_steps(self):
+ for name, step in self._steps():
+ try:
+ step()
+ except Exception as e:
+ self.fail("{} failed ({}: {})".format(step, type(e), e))
+ """
diff --git a/openquake/sub/tests/slab/rupture_test_south_america_slab6.py b/openquake/sub/tests/slab/rupture_hypocenter_test.py
similarity index 87%
rename from openquake/sub/tests/slab/rupture_test_south_america_slab6.py
rename to openquake/sub/tests/slab/rupture_hypocenter_test.py
index b00765e6e..a95fea9cd 100644
--- a/openquake/sub/tests/slab/rupture_test_south_america_slab6.py
+++ b/openquake/sub/tests/slab/rupture_hypocenter_test.py
@@ -16,6 +16,7 @@
class RuptureCreationSouthAmericaTest(unittest.TestCase):
"""
+ Test the calculation of the hypocenter
"""
def setUp(self):
@@ -39,12 +40,14 @@ def setUp(self):
build_complex_surface(in_path, max_sampl_dist, self.out_path,
upper_depth=50, lower_depth=200)
+ @unittest.skip('Fix error')
def test_create(self):
"""
Test rupture calculation
"""
- reff = os.path.join(BASE_DATA_PATH, '../data/ini/')
- calculate_ruptures(self.ini_fname, False, reff)
+ reff = os.path.join(BASE_DATA_PATH, '..', 'data', 'ini')
+ kwargs = {'reference_folder': reff, 'only_plt': False}
+ calculate_ruptures(self.ini_fname, **kwargs)
label = 'test'
tmps = '../data/tmp/ruptures.hdf5'
diff --git a/openquake/sub/tests/slab/rupture_mariana_test.py b/openquake/sub/tests/slab/rupture_mariana_test.py
new file mode 100644
index 000000000..bc7bb70ed
--- /dev/null
+++ b/openquake/sub/tests/slab/rupture_mariana_test.py
@@ -0,0 +1,36 @@
+"""
+:module:`openquake.sub.tests.slab.rupture_test_south_america_slab6`
+"""
+
+import pathlib
+import unittest
+import shutil
+import tempfile
+
+from subprocess import call
+
+from openquake.sub.slab.rupture import calculate_ruptures
+from openquake.sub.create_inslab_nrml import create
+from openquake.sub.build_complex_surface import build_complex_surface
+
+HERE = pathlib.Path(__file__).parent
+PLOTTING = False
+
+
+class RuptureCreationMarianaTest(unittest.TestCase):
+
+ def test_create(self):
+ """
+ Test rupture calculation
+ """
+ ini_fname = HERE / 'data' / 'mariana' / 'slab.ini'
+
+ # Create the tmp objects
+ out_path = pathlib.Path(tempfile.mkdtemp())
+ out_hdf5_fname = out_path / 'ruptures.hdf5'
+ out_hdf5_smoothing_fname = out_path / 'smoothing.hdf5'
+
+ # Compute ruptures
+ kwargs = {'out_hdf5_fname': out_hdf5_fname,
+ 'out_hdf5_smoothing_fname': out_hdf5_smoothing_fname}
+ calculate_ruptures(ini_fname, **kwargs)
diff --git a/openquake/sub/tests/slab/rupture_test_pai.py b/openquake/sub/tests/slab/rupture_pai_test.py
similarity index 100%
rename from openquake/sub/tests/slab/rupture_test_pai.py
rename to openquake/sub/tests/slab/rupture_pai_test.py
diff --git a/openquake/sub/tests/slab/rupture_test_sa06.py b/openquake/sub/tests/slab/rupture_sa06_test.py
similarity index 100%
rename from openquake/sub/tests/slab/rupture_test_sa06.py
rename to openquake/sub/tests/slab/rupture_sa06_test.py
diff --git a/openquake/sub/tests/slab/rupture_smooth_test.py b/openquake/sub/tests/slab/rupture_smooth_test.py
index e1e4553a2..94fe6a237 100644
--- a/openquake/sub/tests/slab/rupture_smooth_test.py
+++ b/openquake/sub/tests/slab/rupture_smooth_test.py
@@ -66,12 +66,15 @@ def setUp(self):
def tearDown(self):
shutil.rmtree(self.out_path)
+ @unittest.skip('Fix coordinates')
def test01(self):
""" Test smoothing """
# Create the ruptures
self.reff = os.path.join(BASE_DATA_PATH, '..', 'data', 'ini')
- calculate_ruptures(self.ini, False, self.reff)
+
+ kwargs = {'only_plt': False, 'reference_folder': self.reff}
+ calculate_ruptures(self.ini, **kwargs)
# Create .xml with OQ input
label = 'test'
diff --git a/openquake/sub/tests/slab/rupture_test_hypocenter.py b/openquake/sub/tests/slab/rupture_south_america_slab6_test.py
similarity index 91%
rename from openquake/sub/tests/slab/rupture_test_hypocenter.py
rename to openquake/sub/tests/slab/rupture_south_america_slab6_test.py
index 6036c8860..1a80ae2a6 100644
--- a/openquake/sub/tests/slab/rupture_test_hypocenter.py
+++ b/openquake/sub/tests/slab/rupture_south_america_slab6_test.py
@@ -16,7 +16,6 @@
class RuptureCreationSouthAmericaTest(unittest.TestCase):
"""
- Test the calculation of the hypocenter
"""
def setUp(self):
@@ -40,12 +39,14 @@ def setUp(self):
build_complex_surface(in_path, max_sampl_dist, self.out_path,
upper_depth=50, lower_depth=200)
+ @unittest.skip('Fix error in the creation of the surface')
def test_create(self):
"""
Test rupture calculation
"""
reff = os.path.join(BASE_DATA_PATH, '../data/ini/')
- calculate_ruptures(self.ini_fname, False, reff)
+ kwargs = {'reference_folder': reff, 'only_plt': False}
+ calculate_ruptures(self.ini_fname, **kwargs)
label = 'test'
tmps = '../data/tmp/ruptures.hdf5'
diff --git a/openquake/sub/tests/slab/rupture_test_cam.py b/openquake/sub/tests/slab/rupture_test_cam.py
deleted file mode 100644
index 9b31951c3..000000000
--- a/openquake/sub/tests/slab/rupture_test_cam.py
+++ /dev/null
@@ -1,68 +0,0 @@
-"""
-"""
-
-import os
-import unittest
-import shutil
-
-from openquake.sub.slab.rupture import calculate_ruptures
-from openquake.sub.create_inslab_nrml import create
-from openquake.sub.build_complex_surface import build_complex_surface
-
-BASE_DATA_PATH = os.path.dirname(__file__)
-
-
-class RuptureCreationCAMTest(unittest.TestCase):
- """
- This set of tests check the construction of ruptures for inslab sources
- using the Central America subduction zone.
- """
-
- def setUp(self):
- relpath = '../data/ini/test.ini'
- self.ini_fname = os.path.join(BASE_DATA_PATH, relpath)
- #
- # prepare the input folder and the output folder
- in_path = os.path.join(BASE_DATA_PATH, '../data/sp_cam/')
- out_path = os.path.join(BASE_DATA_PATH, '../data/tmp/')
- #
- # cleaning the tmp directory
- if os.path.exists(out_path):
- shutil.rmtree(out_path)
- #
- # create the complex surface. We use the profiles used for
- # the subduction in CCARA
- max_sampl_dist = 10.
- build_complex_surface(in_path, max_sampl_dist, out_path,
- upper_depth=50, lower_depth=200)
-
- def step01(self):
- reff = os.path.abspath(os.path.join(BASE_DATA_PATH, '../data/ini/'))
- calculate_ruptures(self.ini_fname, False, reff)
- #
- # check the existence of the rupture file
- tmps = '../data/tmp/ruptures.hdf5'
- rupture_hdf5_fname = os.path.abspath(os.path.join(BASE_DATA_PATH,
- tmps))
- self.assertTrue(os.path.exists(rupture_hdf5_fname))
-
- def step02(self):
- label = 'test'
- tmps = '../data/tmp/ruptures.hdf5'
- rupture_hdf5_fname = os.path.abspath(os.path.join(BASE_DATA_PATH,
- tmps))
- output_folder = os.path.join(BASE_DATA_PATH, '../tmp/')
- investigation_t = '1.'
- create(label, rupture_hdf5_fname, output_folder, investigation_t)
-
- def _steps(self):
- for name in sorted(dir(self)):
- if name.startswith("step"):
- yield name, getattr(self, name)
-
- def test_steps(self):
- for name, step in self._steps():
- try:
- step()
- except Exception as e:
- self.fail("{} failed ({}: {})".format(step, type(e), e))