Skip to content

Commit 80adbea

Browse files
authored
Merge pull request #9098 from gem/random_seed
Fixed the random generation of the GMFs
2 parents 7c16a10 + 59f5cbe commit 80adbea

File tree

65 files changed

+1420
-1419
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+1420
-1419
lines changed

openquake/calculators/tests/event_based_risk_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def test_case_1_ins(self):
117117

118118
aw = extract(self.calc.datastore, 'agg_losses/structural')
119119
self.assertEqual(aw.stats, ['mean'])
120-
numpy.testing.assert_allclose(aw.array, [870.47925], atol=.001)
120+
numpy.testing.assert_allclose(aw.array, [813.30096], atol=.001)
121121

122122
fnames = export(('aggrisk', 'csv'), self.calc.datastore)
123123
for fname in fnames:

openquake/calculators/tests/scenario_damage_test.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def test_case_5a(self):
141141
dmg = extract(self.calc.datastore, 'agg_damages/structural?taxonomy=*')
142142
self.assertEqual(dmg.array.shape, (1, 2, 5)) # (T, R, D)
143143
aac(dmg.array[0].sum(axis=0),
144-
[0.68279, 0.632278, 0.309294, 0.155964, 0.219674], atol=1E-5)
144+
[0.68951, 0.623331, 0.305033, 0.155678, 0.22645], atol=1E-5)
145145

146146
def test_case_6(self):
147147
# this is a case with 5 assets on the same point
@@ -187,10 +187,10 @@ def test_case_9(self):
187187
df = self.calc.datastore.read_df('risk_by_event', 'event_id',
188188
{'agg_id': K})
189189
dmg = df.loc[1937] # damage caused by the event 1937
190-
self.assertEqual(dmg.dmg_1.sum(), 135)
191-
self.assertEqual(dmg.dmg_2.sum(), 10)
192-
self.assertEqual(dmg.dmg_3.sum(), 0)
193-
self.assertEqual(dmg.dmg_4.sum(), 0)
190+
self.assertEqual(dmg.dmg_1.sum(), 133)
191+
self.assertEqual(dmg.dmg_2.sum(), 84)
192+
self.assertEqual(dmg.dmg_3.sum(), 21)
193+
self.assertEqual(dmg.dmg_4.sum(), 22)
194194

195195
[fname] = export(('aggrisk', 'csv'), self.calc.datastore)
196196
self.assertEqualFiles('expected/aggrisk.csv', fname, delta=1E-4)

openquake/calculators/tests/scenario_risk_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ def test_case_master(self):
172172
'state=*&cresta=0.11')
173173
self.assertEqual(obj.selected, [b'state=*', b'cresta=0.11'])
174174
self.assertEqual(obj.tags, [b'state=01'])
175-
aac(obj.array, [[2421.5598]], atol=.02) # from avg_losses-stats
175+
aac(obj.array, [[2368.613]], atol=.02) # from avg_losses-stats
176176

177177
# check portfolio_loss
178178
fname = gettemp(view('portfolio_loss', self.calc.datastore))

openquake/hazardlib/calc/gmf.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ def compute_all(self, scenario, sig_eps=None, max_iml=None, mon=Monitor()):
144144
mag = self.ebrupture.rupture.mag
145145
data = AccumDict(accum=[])
146146
mean_stds = self.cmaker.get_mean_stds([self.ctx]) # (4, G, M, N)
147+
rng = numpy.random.default_rng(self.seed)
147148
for g, (gs, rlzs) in enumerate(rlzs_by_gsim.items()):
148149
num_events = numpy.isin(rlz_, rlzs).sum()
149150
if num_events == 0: # it may happen
@@ -152,7 +153,8 @@ def compute_all(self, scenario, sig_eps=None, max_iml=None, mon=Monitor()):
152153
# .compute outside of the loop over the realizations;
153154
# it is better to have few calls producing big arrays
154155
with mon:
155-
array, sig, eps = self.compute(gs, num_events, mean_stds[:, g])
156+
array, sig, eps = self.compute(
157+
gs, num_events, mean_stds[:, g], rng)
156158
M, N, E = array.shape # sig and eps have shapes (M, E) instead
157159

158160
# manage max_iml
@@ -205,11 +207,12 @@ def compute_all(self, scenario, sig_eps=None, max_iml=None, mon=Monitor()):
205207
data[key] = F32(data[key])
206208
return pandas.DataFrame(data)
207209

208-
def compute(self, gsim, num_events, mean_stds):
210+
def compute(self, gsim, num_events, mean_stds, rng):
209211
"""
210212
:param gsim: GSIM used to compute mean_stds
211213
:param num_events: the number of seismic events
212214
:param mean_stds: array of shape (4, M, N)
215+
:param rng: random number generator for the rupture
213216
:returns:
214217
a 32 bit array of shape (num_imts, num_sites, num_events) and
215218
two arrays with shape (num_imts, num_events): sig for tau
@@ -220,13 +223,13 @@ def compute(self, gsim, num_events, mean_stds):
220223
(len(self.imts), len(self.ctx.sids), num_events), F32)
221224
sig = numpy.zeros((M, num_events), F32) # same for all events
222225
eps = numpy.zeros((M, num_events), F32) # not the same
223-
rng = numpy.random.default_rng(self.seed)
224226
num_sids = len(self.ctx.sids)
225227
ccdist = self.cross_correl.distribution
226228
# build arrays of random numbers of shape (M, N, E) and (M, E)
227229
intra_eps = [
228230
ccdist.rvs((num_sids, num_events), rng) for _ in range(M)]
229-
inter_eps = self.cross_correl.get_inter_eps(self.imts, num_events, rng)
231+
inter_eps = self.cross_correl.get_inter_eps(
232+
self.imts, num_events, rng)
230233
for m, imt in enumerate(self.imts):
231234
try:
232235
result[m], sig[m], eps[m] = self._compute(
@@ -337,5 +340,6 @@ def ground_motion_fields(rupture, sites, imts, gsim, truncation_level,
337340
rupture.seed = seed
338341
gc = GmfComputer(rupture, sites, cmaker, correlation_model)
339342
mean_stds = cmaker.get_mean_stds([gc.ctx])[:, 0]
340-
res, _sig, _eps = gc.compute(gsim, realizations, mean_stds)
343+
res, _sig, _eps = gc.compute(gsim, realizations, mean_stds,
344+
numpy.random.default_rng(seed))
341345
return {imt: res[m] for m, imt in enumerate(gc.imts)}
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
sid,eid,gmv_0,gmv_1,gmv_2
2-
0,0,0.038956832,0.071180224,0.028245598
3-
1,0,0.06801112,0.15832695,0.45075393
4-
0,1,0.05702798,0.1041804,0.041357614
5-
1,1,0.09124984,0.21230298,0.6044539
6-
0,2,0.08352012,0.15254924,0.06058913
7-
1,2,0.122333236,0.2847986,0.8108433
2+
0,0,0.038956825,0.071180224,0.028245592
3+
1,0,0.06801111,0.15832695,0.4507539
4+
0,1,0.035835203,0.12729436,0.13566652
5+
1,1,0.08312619,0.19628255,0.19723822
6+
0,2,0.09251106,0.12512745,0.3314978
7+
1,2,0.15861663,0.17769974,0.5514431
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
sid,eid,gmv_0,gmv_1,gmv_2
2-
0,0,0.035455402,0.063939184,0.026014702
3-
1,0,0.05366238,0.122142,0.35274813
4-
0,1,0.04463572,0.08049464,0.032750573
5-
1,1,0.067556925,0.15376768,0.44408357
6-
0,2,0.05619303,0.10133676,0.04123052
7-
1,2,0.08504914,0.19358204,0.5590681
2+
0,0,0.035455402,0.06393916,0.026014695
3+
1,0,0.05366237,0.122142,0.3527481
4+
0,1,0.028048156,0.09835358,0.10743258
5+
1,1,0.061542567,0.14216433,0.14490809
6+
0,2,0.062242195,0.08312077,0.22558215
7+
1,2,0.110274255,0.12078529,0.38021433
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
sid,eid,gmv_0,gmv_1,gmv_2
2-
0,0,0.024208717,0.047427468,0.019781169
3-
1,0,0.04272813,0.10576718,0.30670598
4-
0,1,0.035848267,0.070249185,0.029307561
5-
1,1,0.057976518,0.14354905,0.4162662
6-
0,2,0.053128228,0.10406787,0.043428622
7-
1,2,0.07868662,0.194782,0.56493694
2+
0,0,0.024208715,0.047427453,0.019781167
3+
1,0,0.04272812,0.105767176,0.30670598
4+
0,1,0.022526305,0.08583499,0.09613838
5+
1,1,0.052815065,0.1327168,0.13583104
6+
0,2,0.05884748,0.08536094,0.23760848
7+
1,2,0.10202465,0.121534005,0.38420567
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
sid,eid,gmv_0,gmv_1,gmv_2
2-
0,0,0.056281887,0.15889703,0.043907955
3-
1,0,0.0712555,0.23564857,0.47283486
4-
0,1,0.09180673,0.21371265,0.056177422
5-
1,1,0.12338302,0.35627705,0.69194907
6-
0,2,0.14951362,0.28738016,0.07172015
7-
1,2,0.2140486,0.5398343,1.0147599
2+
0,0,0.056281883,0.15889701,0.04390795
3+
1,0,0.07125549,0.23564854,0.47283486
4+
0,1,0.05768945,0.26112798,0.18428035
5+
1,1,0.11239868,0.3293923,0.22578861
6+
0,2,0.16560876,0.23572154,0.39239833
7+
1,2,0.27753425,0.336829,0.6901239
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
sid,eid,gmv_0,gmv_1,gmv_2
2-
0,0,0.032240205,0.06805621,0.024183135
2+
0,0,0.032240197,0.06805619,0.02418313
33
1,0,0.05553408,0.15493044,0.383735
4-
0,1,0.054308172,0.11459128,0.0407272
5-
1,1,0.085787825,0.23930348,0.59281516
6-
0,2,0.09151806,0.19302227,0.06861667
7-
1,2,0.13253728,0.36966425,0.91591173
4+
0,1,0.034126133,0.14001505,0.13359855
5+
1,1,0.078150444,0.22124559,0.19344038
6+
0,2,0.10136996,0.15832517,0.37541842
7+
1,2,0.17184712,0.23065157,0.6228987
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
sid,eid,gmv_0,gmv_1,gmv_2
2-
0,0,0.02833475,0.067301385,0.024803378
3-
1,0,0.04922864,0.14033042,0.3714123
4-
0,1,0.04002951,0.095069945,0.035035707
5-
1,1,0.069531664,0.19813071,0.52467597
6-
0,2,0.08480079,0.2014674,0.07426278
7-
1,2,0.14733902,0.41996855,1.1118759
2+
0,0,0.02833475,0.06730138,0.024803376
3+
1,0,0.049228624,0.14033039,0.3714123
4+
0,1,0.025153711,0.11616261,0.11492858
5+
1,1,0.06334151,0.1831797,0.17120601
6+
0,2,0.093929574,0.16525222,0.40630966
7+
1,2,0.191039,0.2620389,0.7561711

0 commit comments

Comments
 (0)