Skip to content

Commit

Permalink
Merge pull request #9064 from gem/rates32bit
Browse files Browse the repository at this point in the history
Storing the rates as 32 bit floats
  • Loading branch information
micheles committed Oct 3, 2023
2 parents c3f56f0 + 2ea51d2 commit d29486a
Show file tree
Hide file tree
Showing 135 changed files with 1,228 additions and 1,222 deletions.
2 changes: 1 addition & 1 deletion openquake/baselib/hdf5.py
Original file line number Diff line number Diff line change
Expand Up @@ -782,7 +782,7 @@ def to_dframe(self, skip_zeros=True):
if sum(tup):
out.append(values + tup)
else:
out.append(values + tup)
out.append(values + tuple(0 if x == 0 else x for x in tup))
return pandas.DataFrame(out, columns=fields)

def to_dict(self):
Expand Down
36 changes: 13 additions & 23 deletions openquake/calculators/classical.py
Original file line number Diff line number Diff line change
Expand Up @@ -263,48 +263,38 @@ def get_rates(self, pmap):
out[:, :] += rates[:, :, i] * self.weights[rlzs].sum()
return out.reshape((self.N, self.M, self.L1))

def store_poes(self, pnes, the_sids, gid=0):
def store_rates(self, pnemap, the_sids, gid=0):
"""
Store 1-pnes inside the _rates dataset
Store pnes inside the _rates dataset
"""
avg_poe = 0
avg_rate = 0
# store by IMT to save memory
for imt in self.imtls:
slc = self.imtls(imt)
poes = 1. - pnes[:, slc]
# Physically, an extremely small intensity measure level can have an
# extremely large probability of exceedence,however that probability
# cannot be exactly 1 unless the level is exactly 0. Numerically,
# the PoE can be 1 and this give issues when calculating the damage:
# there is a log(0) in scientific.annual_frequency_of_exceedence.
# Here we solve the issue by replacing the unphysical probabilities
# 1 with .9999999999999999 (the float64 closest to 1).
poes[poes == 1.] = .9999999999999999
# the nonzero below uses a lot of memory, however it is useful
# to reduce the storage a lot (~3 times for EUR)
idxs, lids, gids = poes.nonzero()
rates = pnemap.to_rates(slc) # shape (N, L1, G)
idxs, lids, gids = rates.nonzero()
if len(idxs) == 0: # happens in case_60
return 0
sids = the_sids[idxs]
rate = rates[idxs, lids, gids]
hdf5.extend(self.datastore['_rates/sid'], sids)
hdf5.extend(self.datastore['_rates/gid'], gids + gid)
hdf5.extend(self.datastore['_rates/lid'], lids + slc.start)
hdf5.extend(self.datastore['_rates/rate'],
disagg.to_rates(poes[idxs, lids, gids]))
hdf5.extend(self.datastore['_rates/rate'], rate)

# slice_by_sid contains 3x6=18 slices in classical/case_22
# which has 6 IMTs each one with 20 levels
sbs = build_slice_by_sid(sids, self.offset)
hdf5.extend(self.datastore['_rates/slice_by_sid'], sbs)
self.offset += len(sids)
avg_poe += poes.mean(axis=(0, 2)) @ self.level_weights[slc]
self.acc['avg_poe'] = avg_poe
avg_rate += rates.mean(axis=(0, 2)) @ self.level_weights[slc]
self.acc['avg_rate'] = avg_rate
self.acc['nsites'] = self.offset
return self.offset * 16 # 4 + 2 + 2 + 8 bytes

def store_mean_rates_by_src(self, pmaps):
"""
Store data inside mean_rates_by_src
Store data inside mean_rates_by_src with shape (N, M, L1, Ns)
"""
mean_rates_by_src = self.datastore['mean_rates_by_src/array'][()]
for key, pmap in pmaps.items():
Expand Down Expand Up @@ -519,7 +509,7 @@ def execute_reg(self, maxw):
smap = parallel.Starmap(classical, allargs, h5=self.datastore.hdf5)
acc = smap.reduce(self.agg_dicts, acc)
with self.monitor('storing PoEs', measuremem=True):
nbytes = self.haz.store_poes(self.pmap.array, self.pmap.sids)
nbytes = self.haz.store_rates(self.pmap, self.pmap.sids)
logging.info('Stored %s of PoEs', humansize(nbytes))
del self.pmap
if self.oqparam.disagg_by_src:
Expand Down Expand Up @@ -554,8 +544,8 @@ def execute_big(self, maxw):
pnemap = dic['pnemap']
self.cfactor += dic['cfactor']
gid = self.gids[dic['grp_id']][0]
nbytes = self.haz.store_poes(pnemap.array, pnemap.sids, gid)
logging.info('Stored %s of PoEs', humansize(nbytes))
nbytes = self.haz.store_rates(pnemap, pnemap.sids, gid)
logging.info('Stored %s of rates', humansize(nbytes))
return {}

def store_info(self):
Expand Down
5 changes: 3 additions & 2 deletions openquake/calculators/disaggregation.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
AccumDict, pprod, agg_probs, shortlist)
from openquake.baselib.python3compat import encode
from openquake.hazardlib import stats, probability_map, valid
from openquake.hazardlib.calc import disagg
from openquake.hazardlib.calc import disagg, mean_rates
from openquake.hazardlib.contexts import (
read_cmakers, read_src_mutex, read_ctx_by_grp)
from openquake.commonlib import util
Expand Down Expand Up @@ -420,7 +420,8 @@ def save_disagg_results(self, results, name):
pprod(mat8[..., 0, 0], axis=(1, 2, 3, 4, 5)))
poe_agg = pprod(mat6, axis=(0, 1, 2, 3, 4, 5))
if name.endswith('-rlzs'):
self.datastore['poe4'][s, m, p, z] = poe_agg
self.datastore['poe4'][s, m, p, z] = max(
poe_agg, mean_rates.CUTOFF)

self.datastore[name] = out
# below a dataset useful for debugging, at minimum IMT and maximum RP
Expand Down
1 change: 0 additions & 1 deletion openquake/calculators/export/hazard.py
Original file line number Diff line number Diff line change
Expand Up @@ -625,7 +625,6 @@ def export_disagg_csv(ekey, dstore):
imt_idx = [imt2idx[imt] for imt in df.imt]
poe_idx = [poe2idx[poe] for poe in df.poe]
df['iml'] = iml2[imt_idx, poe_idx]

df = pandas.DataFrame(
{col: df[col] for col in cols}).sort_values(['imt', 'poe'])
if len(df):
Expand Down
9 changes: 4 additions & 5 deletions openquake/calculators/extract.py
Original file line number Diff line number Diff line change
Expand Up @@ -1111,13 +1111,12 @@ def bin_edges(dset, sid):
return dset[:] # regular bin edges

bins = {k: bin_edges(v, sid) for k, v in dstore['disagg-bins'].items()}
matrix = dstore['disagg-%s/%s' % (spec, label)][sid]
fullmatrix = dstore['disagg-%s/%s' % (spec, label)][sid]
# matrix has shape (..., M, P, Z)
matrix = matrix[..., imti, poei, :]
matrix = fullmatrix[..., imti, poei, :]
if traditional:
poe_agg = dstore['poe4'][sid, imti, poei] # shape (N, M, P, Z)
if matrix.any(): # nonzero
matrix = numpy.log(1. - matrix) / numpy.log(1. - poe_agg)
poe_agg = dstore['poe4'][sid, imti, poei] # shape (M, P, Z)
matrix[:] = numpy.log(1. - matrix) / numpy.log(1. - poe_agg)

disag_tup = tuple(label.split('_'))
axis = [bins[k] for k in disag_tup]
Expand Down
3 changes: 1 addition & 2 deletions openquake/calculators/tests/disagg_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,14 +154,13 @@ def test_case_7(self):

haz = self.calc.datastore['hmap3'][0, 0] # shape NMP
self.assertEqual(haz[0], 0) # shortest return period => 0 hazard
self.assertAlmostEqual(haz[1], 0.13311564210230828)
aae(haz[1], 0.13311564, decimal=6)

# test normal disaggregation
[fname] = export(('disagg-rlzs', 'csv'), self.calc.datastore)
self.assertEqualFiles('expected/TRT-0.csv', fname)

# test conditional disaggregation
raise unittest.SkipTest('Non-reproducible issue on CI :-(')
[fname] = export(('disagg-rlzs-traditional', 'csv'),
self.calc.datastore)
self.assertEqualFiles('expected/TRT-traditional-0.csv', fname)
Expand Down
6 changes: 3 additions & 3 deletions openquake/engine/tests/aelo_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,11 @@
aac = numpy.testing.assert_allclose

SITES = ['far -90.071 16.60'.split(), 'close -85.071 10.606'.split()]
EXPECTED = [[0.318191, 0.661792, 0.758443], [0.763373, 1.84959, 1.28969]]
ASCE7 = ['0.78388', '0.50000', '0.50000', '1.84959', '0.95914', '1.50000',
EXPECTED = [[0.318181, 0.661788, 0.758431], [0.763345, 1.84953, 1.28969]]
ASCE7 = ['0.78388', '0.50000', '0.50000', '1.84953', '0.95911', '1.50000',
'1.50000', 'Very High', '1.28969', '0.95669', '0.60000', '0.60000',
'Very High']
ASCE41 = [1.5, 1.45972, 1.45972, 0.83824, 0.83824, 1., 0.6,
ASCE41 = [1.5, 1.45971, 1.45971, 0.83824, 0.83824, 1., 0.6,
1.00811, 0.6 , 0.4, 0.57329, 0.4]


Expand Down
4 changes: 3 additions & 1 deletion openquake/hazardlib/calc/mean_rates.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
from openquake.hazardlib.probability_map import ProbabilityMap
from openquake.hazardlib.contexts import get_cmakers

CUTOFF = 1E-12


def to_rates(probs, itime=1, minrate=0.):
"""
Expand All @@ -35,7 +37,7 @@ def to_rates(probs, itime=1, minrate=0.):
pnes[pnes == 0] = 1E-45 # mininum 32 bit float
# NB: the test most sensitive to 1E-45 and 1E-12 is case_78
probs = - numpy.log(pnes) / itime
probs[probs < 1E-12] = minrate
probs[probs < CUTOFF] = minrate
probs[probs > 100.] = 100.
return probs

Expand Down
18 changes: 17 additions & 1 deletion openquake/hazardlib/probability_map.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
F64 = numpy.float64
BYTES_PER_FLOAT = 8
TWO24 = 2 ** 24
rates_dt = {'gid': U16, 'sid': U32, 'lid': U16, 'rate': F64}
rates_dt = {'gid': U16, 'sid': U32, 'lid': U16, 'rate': F32}


if numba:
Expand Down Expand Up @@ -393,6 +393,22 @@ def convert(self, imtls, nsites, idx=0):
curves[imt][self.sids] = self.array[:, imtls(imt), idx]
return curves

def to_rates(self, slc=slice(None)):
"""
Assuming self contains an array of probabilities of no exceedance,
returns an array of rates of shape (N, L, G).
"""
pnes = self.array[:, slc]
# Physically, an extremely small intensity measure level can have an
# extremely large probability of exceedence,however that probability
# cannot be exactly 1 unless the level is exactly 0. Numerically,
# the PoE can be 1 and this give issues when calculating the damage:
# there is a log(0) in scientific.annual_frequency_of_exceedence.
# Here we solve the issue by replacing the unphysical probabilities
# 1 with .9999999999999999 (the float64 closest to 1).
pnes[pnes == 0.] = 1.11E-16
return -numpy.log(pnes)

def interp4D(self, imtls, poes):
"""
:param imtls: a dictionary imt->imls with M items
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#,,,,,"generated_by='OpenQuake engine 3.15.0-git50518578d1', start_date='2022-05-05T11:44:43', checksum=640203984, kind='mean', investigation_time=1.0, imt='PGA'"
#,,,,,"generated_by='OpenQuake engine 3.18.0-gitabf2de85b8', start_date='2023-10-03T06:09:08', checksum=2107362341, kind='mean', investigation_time=1.0, imt='PGA'"
lon,lat,depth,poe-0.1000000,poe-0.4000000,poe-0.6000000
0.00000,0.00000,-0.10000,4.553861E-01,5.754043E-02,6.354517E-03
0.10000,0.00000,-0.10000,1.522633E-01,0.000000E+00,0.000000E+00
0.20000,0.00000,-0.10000,3.037793E-03,0.000000E+00,0.000000E+00
0.00000,0.00000,-0.10000,4.553860E-01,5.754042E-02,6.354511E-03
0.10000,0.00000,-0.10000,1.522632E-01,0.000000E+00,0.000000E+00
0.20000,0.00000,-0.10000,3.037810E-03,0.000000E+00,0.000000E+00
0.30000,0.00000,-0.10000,0.000000E+00,0.000000E+00,0.000000E+00
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#,,,,,"generated_by='OpenQuake engine 3.15.0-git50518578d1', start_date='2022-05-05T11:44:43', checksum=640203984, kind='mean', investigation_time=1.0, imt='SA(0.1)'"
#,,,,,"generated_by='OpenQuake engine 3.18.0-gitabf2de85b8', start_date='2023-10-03T06:09:08', checksum=2107362341, kind='mean', investigation_time=1.0, imt='SA(0.1)'"
lon,lat,depth,poe-0.1000000,poe-0.4000000,poe-0.6000000
0.00000,0.00000,-0.10000,6.081918E-01,3.287217E-01,1.994702E-01
0.10000,0.00000,-0.10000,4.348205E-01,5.031637E-02,3.738346E-03
0.20000,0.00000,-0.10000,1.572770E-01,0.000000E+00,0.000000E+00
0.30000,0.00000,-0.10000,2.731795E-02,0.000000E+00,0.000000E+00
0.10000,0.00000,-0.10000,4.348205E-01,5.031639E-02,3.738284E-03
0.20000,0.00000,-0.10000,1.572769E-01,0.000000E+00,0.000000E+00
0.30000,0.00000,-0.10000,2.731800E-02,0.000000E+00,0.000000E+00
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#,,,,,"generated_by='OpenQuake engine 3.17.0-git9650f58b4e', start_date='2023-06-09T07:43:53', checksum=3325833889, kind='mean', investigation_time=1.0, imt='PGA'"
#,,,,,"generated_by='OpenQuake engine 3.18.0-gitabf2de85b8', start_date='2023-10-03T06:09:09', checksum=3325833889, kind='mean', investigation_time=1.0, imt='PGA'"
lon,lat,depth,poe-0.1000000,poe-0.4000000,poe-0.6000000
0.00000,0.00000,0.00000,1.084106E-01,1.382512E-03,2.185572E-04
0.00000,0.00000,0.00000,1.084105E-01,1.382530E-03,2.185702E-04
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#,,,,,,,"generated_by='OpenQuake engine 3.18.0-git44e5439c46', start_date='2023-08-24T07:24:19', checksum=669995148, kind='mean', investigation_time=50.0, imt='PGA'"
#,,,,,,,"generated_by='OpenQuake engine 3.18.0-gitabf2de85b8', start_date='2023-10-03T06:09:09', checksum=2362333195, kind='mean', investigation_time=50.0, imt='PGA'"
lon,lat,depth,poe-0.0050000,poe-0.0223607,poe-0.1000000,poe-0.4472136,poe-2.0000000
0.00000,0.00000,0.00000,8.786065E-01,8.539687E-01,4.671557E-01,2.563463E-02,0.000000E+00
0.00000,0.00000,0.00000,8.786065E-01,8.539687E-01,4.671557E-01,2.563465E-02,0.000000E+00
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#,,,,,"generated_by='OpenQuake engine 3.12.0-gitd989b756d9', start_date='2021-06-22T06:27:37', checksum=2473631255, kind='rlz-000', investigation_time=1.0, imt='PGA'"
#,,,,,"generated_by='OpenQuake engine 3.18.0-gitabf2de85b8', start_date='2023-10-03T06:09:09', checksum=3906984873, kind='rlz-000', investigation_time=1.0, imt='PGA'"
lon,lat,depth,poe-0.1000000,poe-0.4000000,poe-0.6000000
0.00000,0.00000,0.00000,4.856105E-01,2.555642E-02,0.000000E+00
0.00000,0.00000,0.00000,4.856105E-01,2.555645E-02,0.000000E+00
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#,,,,"generated_by='OpenQuake engine 3.15.0-git7c5b3f1678', start_date='2022-05-14T10:44:47', checksum=2967670219, kind='mean', investigation_time=1.0"
#,,,,"generated_by='OpenQuake engine 3.18.0-gitabf2de85b8', start_date='2023-10-03T06:09:09', checksum=969346546, kind='mean', investigation_time=1.0"
lon,lat,PGA-0.002105,SA(0.2)-0.002105,SA(1.0)-0.002105
-123.23738,49.27479,3.023843E-03,1.227869E-02,1.304542E-02
-123.23282,49.26162,2.969384E-03,1.210475E-02,1.294519E-02
-123.20480,49.26786,2.971276E-03,1.211080E-02,1.294868E-02
-123.23738,49.27479,3.023730E-03,1.227876E-02,1.304533E-02
-123.23282,49.26162,2.969411E-03,1.210481E-02,1.294509E-02
-123.20480,49.26786,2.971350E-03,1.211078E-02,1.294870E-02
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#,,,,"generated_by='OpenQuake engine 3.15.0-git7c5b3f1678', start_date='2022-05-14T10:44:47', checksum=2967670219, kind='mean', investigation_time=1.0"
#,,,,"generated_by='OpenQuake engine 3.18.0-gitabf2de85b8', start_date='2023-10-03T06:09:09', checksum=969346546, kind='mean', investigation_time=1.0"
lon,lat,0.002105~PGA,0.002105~SA(0.2),0.002105~SA(1.0)
-123.23738,49.27479,3.023843E-03,1.227869E-02,1.304542E-02
-123.23282,49.26162,2.969384E-03,1.210475E-02,1.294519E-02
-123.20480,49.26786,2.971276E-03,1.211080E-02,1.294868E-02
-123.23738,49.27479,3.023730E-03,1.227876E-02,1.304533E-02
-123.23282,49.26162,2.969411E-03,1.210481E-02,1.294509E-02
-123.20480,49.26786,2.971350E-03,1.211078E-02,1.294870E-02
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#,,,,,"generated_by='OpenQuake engine 3.9.0-git93fe51638e', start_date='2020-03-29T09:13:17', checksum=240735792, kind='mean', investigation_time=50.0, imt='PGA'"
#,,,,,"generated_by='OpenQuake engine 3.18.0-gitabf2de85b8', start_date='2023-10-03T06:09:09', checksum=232364069, kind='mean', investigation_time=50.0, imt='PGA'"
lon,lat,depth,poe-0.0100000,poe-0.1000000,poe-0.3000000
15.00000,37.70000,-2.01300,8.550831E-03,0.000000E+00,0.000000E+00
15.00000,37.80000,-2.09500,2.061190E-01,1.125127E-04,0.000000E+00
15.10000,37.70000,-0.67800,1.498856E-02,0.000000E+00,0.000000E+00
15.10000,37.80000,-1.09100,6.578313E-01,4.599603E-03,0.000000E+00
15.20000,37.70000,-0.03600,2.875151E-03,0.000000E+00,0.000000E+00
15.20000,37.80000,-0.10300,5.078907E-02,0.000000E+00,0.000000E+00
15.00000,37.70000,-2.01300,8.550882E-03,0.000000E+00,0.000000E+00
15.00000,37.80000,-2.09500,2.061190E-01,1.125336E-04,0.000000E+00
15.10000,37.70000,-0.67800,1.498860E-02,0.000000E+00,0.000000E+00
15.10000,37.80000,-1.09100,6.578313E-01,4.599512E-03,0.000000E+00
15.20000,37.70000,-0.03600,2.875149E-03,0.000000E+00,0.000000E+00
15.20000,37.80000,-0.10300,5.078912E-02,0.000000E+00,0.000000E+00
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#,,,,,,,,,,,,,,,,,,,,,"generated_by='OpenQuake engine 3.13.0-git07591eb51e', start_date='2021-10-08T09:47:06', checksum=710037141, kind='rlz-000', investigation_time=50.0, imt='SA(1.0)'"
#,,,,,,,,,,,,,,,,,,,,,"generated_by='OpenQuake engine 3.18.0-gitabf2de85b8', start_date='2023-10-03T06:09:09', checksum=3868232975, kind='rlz-000', investigation_time=50.0, imt='SA(1.0)'"
lon,lat,depth,poe-0.0050000,poe-0.0070000,poe-0.0098000,poe-0.0137000,poe-0.0192000,poe-0.0269000,poe-0.0376000,poe-0.0527000,poe-0.0738000,poe-0.1030000,poe-0.1450000,poe-0.2030000,poe-0.2840000,poe-0.3970000,poe-0.5560000,poe-0.7780000,poe-1.0900000,poe-1.5200000,poe-2.1300000
0.00000,0.00000,0.00000,6.438556E-01,6.054839E-01,5.512612E-01,4.849747E-01,4.130915E-01,3.440593E-01,2.827080E-01,2.280144E-01,1.781793E-01,1.322683E-01,9.028223E-02,5.679152E-02,3.257455E-02,1.692117E-02,7.788958E-03,3.139963E-03,1.065343E-03,2.938861E-04,5.460570E-05
0.00000,0.00000,0.00000,6.438557E-01,6.054839E-01,5.512612E-01,4.849746E-01,4.130916E-01,3.440592E-01,2.827080E-01,2.280144E-01,1.781794E-01,1.322684E-01,9.028220E-02,5.679154E-02,3.257453E-02,1.692122E-02,7.788956E-03,3.139913E-03,1.065314E-03,2.939105E-04,5.465746E-05
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#,,,,,,,,,,,,,,,,,,,,,"generated_by='OpenQuake engine 3.11.0-gitd389da43c9', start_date='2020-11-20T00:02:27', checksum=4027729790, kind='mean', investigation_time=1.0, imt='PGA'"
#,,,,,,,,,,,,,,,,,,,,,"generated_by='OpenQuake engine 3.18.0-gitabf2de85b8', start_date='2023-10-03T06:09:07', checksum=3795633366, kind='mean', investigation_time=1.0, imt='PGA'"
lon,lat,depth,poe-0.0050000,poe-0.0070000,poe-0.0098000,poe-0.0137000,poe-0.0192000,poe-0.0269000,poe-0.0376000,poe-0.0527000,poe-0.0738000,poe-0.1030000,poe-0.1450000,poe-0.2030000,poe-0.2840000,poe-0.3970000,poe-0.5560000,poe-0.7780000,poe-1.0900000,poe-1.5200000,poe-2.1300000
0.00000,0.00000,0.00000,7.560000E-02,7.560000E-02,7.560000E-02,7.560000E-02,7.560000E-02,7.560000E-02,7.560000E-02,7.560000E-02,7.560000E-02,7.560000E-02,7.560000E-02,7.438567E-02,6.794604E-02,5.525984E-02,3.738719E-02,1.969004E-02,7.210656E-03,1.067663E-03,0.000000E+00
0.00000,0.00000,0.00000,7.560003E-02,7.560003E-02,7.560003E-02,7.560003E-02,7.560003E-02,7.560003E-02,7.560003E-02,7.560003E-02,7.560003E-02,7.560003E-02,7.560003E-02,7.438570E-02,6.794602E-02,5.525988E-02,3.738719E-02,1.969004E-02,7.210612E-03,1.067698E-03,0.000000E+00
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#,,,,,,,,,,,,,,,,"generated_by='OpenQuake engine 3.7.0-git5e91b20b88', start_date='2019-09-05T06:15:48', checksum=3190932410, kind='mean', investigation_time=50.0, imt='PGA'"
#,,,,,,,,,,,,,,,,"generated_by='OpenQuake engine 3.18.0-gitabf2de85b8', start_date='2023-10-03T06:09:07', checksum=691652566, kind='mean', investigation_time=50.0, imt='PGA'"
lon,lat,depth,poe-0.0137000,poe-0.0192000,poe-0.0269000,poe-0.0376000,poe-0.0527000,poe-0.0738000,poe-0.1030000,poe-0.1450000,poe-0.2030000,poe-0.2840000,poe-0.3970000,poe-0.5560000,poe-0.7780000,poe-1.0900000
0.50000,-0.50000,0.00000,9.279056E-02,9.112627E-02,8.615047E-02,7.557168E-02,5.858196E-02,3.820519E-02,1.999377E-02,7.673834E-03,2.085798E-03,3.510677E-04,2.561514E-05,0.000000E+00,0.000000E+00,0.000000E+00
0.50000,-0.50000,0.00000,9.279054E-02,9.112632E-02,8.615047E-02,7.557166E-02,5.858195E-02,3.820515E-02,1.999372E-02,7.673860E-03,2.085805E-03,3.510714E-04,2.563000E-05,0.000000E+00,0.000000E+00,0.000000E+00
Loading

0 comments on commit d29486a

Please sign in to comment.