From 8d728aa951adf9f6338520a87ab55dbf0726f6cb Mon Sep 17 00:00:00 2001 From: Adam Zsarnoczay <33822153+zsarnoczay@users.noreply.github.com> Date: Wed, 20 May 2026 23:37:36 -0700 Subject: [PATCH] feat(regionalGroundMotion): route Vs30 / Z1 / Z2.5 lookups through OpenSHA by name CreateStation's Vs30 dispatch is collapsed to a single OpenSHA path (plus User-specified and an unreachable NCM stub). The bundled Thompson California vs30 tarball is removed; the get_vs30_thompson() and get_vs30_global() are also removed. FetchOpenSHA gets a Vs30 name resolver (_resolve_vs30_model_name) that accepts canonical OpenSHA NAMEs, NAMEs with the UI's " [California only]" suffix, or legacy substrings from older R2D configurations. get_site_z1pt0_from_opensha and ..._z2pt5_... grow an optional model_name argument: None (or 'OpenSHA default model') keeps the current sequenced fallback; a specific OpenSHA basin-depth NAME queries only that provider. NaN flows to the empirical Chiou & Youngs / Campbell & Bozorgnia equations at the per-station level. CreateStation grows the matching basin-depth NAME set and dispatch helper, used by both the upfront parallel-fetch block and the per-station fallback loop. The Wills-2015-outside-CA fallback to Wald & Allen now applies uniformly to every CA-only Vs30 product. EventGrid.csv now also includes Vs30, z1pt0, and z2pt5 columns per grid point (DepthToRock omitted, as CreateStation does not emit it to the site CSV that the EventGrid writer reads). ScenarioForecast drops the Vs30 entries from the startup tar.gz extract loop; only global_zTR_4km.tar.gz (used by liquefaction / landslide) is still unpacked. A new database/site/CMakeLists.txt registers the two remaining tarballs; database/CMakeLists.txt picks it up. The NCM helpers in CreateStation are annotated as UI-unreachable and flag the duplicated '/ws/nshmp/ncm/' URL segment as a likely 2021-era typo. --- .../ComputeIntensityMeasure.py | 14 +- .../regionalGroundMotion/CreateStation.py | 288 +++++++++--------- .../regionalGroundMotion/FetchOpenSHA.py | 108 +++++-- .../regionalGroundMotion/ScenarioForecast.py | 6 +- .../database/CMakeLists.txt | 1 + .../database/site/CMakeLists.txt | 2 + .../database/site/thompson_vs30_4km.tar.gz | Bin 257927 -> 0 bytes 7 files changed, 250 insertions(+), 169 deletions(-) create mode 100644 modules/performRegionalEventSimulation/regionalGroundMotion/database/site/CMakeLists.txt delete mode 100644 modules/performRegionalEventSimulation/regionalGroundMotion/database/site/thompson_vs30_4km.tar.gz diff --git a/modules/performRegionalEventSimulation/regionalGroundMotion/ComputeIntensityMeasure.py b/modules/performRegionalEventSimulation/regionalGroundMotion/ComputeIntensityMeasure.py index 4d0e9c881..3f18e309b 100644 --- a/modules/performRegionalEventSimulation/regionalGroundMotion/ComputeIntensityMeasure.py +++ b/modules/performRegionalEventSimulation/regionalGroundMotion/ComputeIntensityMeasure.py @@ -1106,21 +1106,25 @@ def export_im( # noqa: C901, D103, PLR0912 json.dump(res, f, indent=2) # export the event grid and station csv files if csv_flag: - # output EventGrid.csv + # output EventGrid.csv. Site characterization values (Vs30, z1pt0, + # z2pt5) come from the SimCenterSiteModel.csv that CreateStation + # wrote earlier in the workflow station_name = [ 'site' + str(stations[j]['ID']) + '.csv' for j in range(len(stations)) ] lat = [stations[j]['lat'] for j in range(len(stations))] lon = [stations[j]['lon'] for j in range(len(stations))] - # vs30 = [stations[j]['vs30'] for j in range(len(stations))] - # zTR = [stations[j]['DepthToRock'] for j in range(len(stations))] + vs30 = [stations[j].get('vs30') for j in range(len(stations))] + z1pt0 = [stations[j].get('z1pt0') for j in range(len(stations))] + z2pt5 = [stations[j].get('z2pt5') for j in range(len(stations))] df = pd.DataFrame( # noqa: PD901 { 'GP_file': station_name, 'Longitude': lon, 'Latitude': lat, - # 'Vs30': vs30, - # 'DepthToRock': zTR + 'Vs30': vs30, + 'z1pt0': z1pt0, + 'z2pt5': z2pt5, } ) # if cur_eq[2]: diff --git a/modules/performRegionalEventSimulation/regionalGroundMotion/CreateStation.py b/modules/performRegionalEventSimulation/regionalGroundMotion/CreateStation.py index c505a25c3..28ce25457 100644 --- a/modules/performRegionalEventSimulation/regionalGroundMotion/CreateStation.py +++ b/modules/performRegionalEventSimulation/regionalGroundMotion/CreateStation.py @@ -82,6 +82,39 @@ def get_label(options, labels, label_name): # noqa: D103 print(f'WARNING: Could not identify the label for the {label_name}') # noqa: T201, RET503 +# Canonical OpenSHA basin-depth provider NAMEs (matches `getSourceName()`). +# Used to recognize Z1.0 / Z2.5 Type strings that select a specific OpenSHA +# basin-depth model rather than the default sequenced fallback. +_OPENSHA_BASIN_DEPTH_NAMES = frozenset([ + 'USGS SF Bay Area Velocity Model Release 21.1', + 'USGS Bay Area Velocity Model Release 8.3.0', + 'SCEC Community Velocity Model Version 4, Iteration 26, Basin Depth', + 'SCEC Community Velocity Model Version 4, Iteration 26, M01 w/ Taper, Basin Depth', + 'SCEC CCA, Iteration 6, Basin Depth', + 'SCEC Community Velocity Model Version 4 Basin Depth', + 'SCEC/Harvard Community Velocity Model Version 11.9.x Basin Depth', + 'SCEC CyberShake Study 18.8 Stitched Basin Depth', + 'SCEC CyberShake Study 24.8 Stitched Basin Depth', + 'SCEC Community Velocity Model Version 2 Basin Depth', +]) + + +def _z_opensha_dispatch(z_config, tag_key): + """Decide whether to fetch Z1.0/Z2.5 from OpenSHA and which model. + + Returns a (model_name, should_fetch) tuple: + - ('OpenSHA default model' Type with tag==2) → (None, True): sequenced + - (Type is a basin-depth NAME) → (NAME, True): specific + - (anything else) → (None, False): no fetch + """ + cfg_type = z_config.get('Type', '') + if cfg_type in _OPENSHA_BASIN_DEPTH_NAMES: + return cfg_type, True + if cfg_type == 'OpenSHA default model' and z_config.get(tag_key) == 2: # noqa: PLR2004 + return None, True + return None, False + + class Station: """A class for stations in an earthquake scenario""" # noqa: D400 @@ -253,46 +286,33 @@ def create_stations( # noqa: C901, PLR0912, PLR0915 nan_loc = [] else: nan_loc = list(range(len(selected_stn.index))) - if 'Global Vs30' in vs30Config['Type']: - vs30_tag = 1 - elif 'Thompson' in vs30Config['Type']: - vs30_tag = 2 - elif 'NCM' in vs30Config['Type']: - vs30_tag = 3 - else: - vs30_tag = 0 - if len(nan_loc) and vs30_tag == 1: - print('CreateStation: Interpolating global Vs30 map for defined stations.') # noqa: T201 - selected_stn.loc[nan_loc, vs30_label] = get_vs30_global( - selected_stn.iloc[ # noqa: PD011 - nan_loc, list(selected_stn.keys()).index(lat_label) - ].values.tolist(), - selected_stn.iloc[ # noqa: PD011 - nan_loc, list(selected_stn.keys()).index(lon_label) - ].values.tolist(), - ) - if len(nan_loc) and vs30_tag == 2: # noqa: PLR2004 - print('CreateStation: Interpolating Thompson Vs30 map for defined stations.') # noqa: T201 - selected_stn.loc[nan_loc, vs30_label] = get_vs30_thompson( - selected_stn.iloc[ # noqa: PD011 - nan_loc, list(selected_stn.keys()).index(lat_label) - ].values.tolist(), - selected_stn.iloc[ # noqa: PD011 - nan_loc, list(selected_stn.keys()).index(lon_label) - ].values.tolist(), - ) - if len(nan_loc) and vs30_tag == 3: # noqa: PLR2004 - print('CreateStation: Fetch National Crustal Model Vs for defined stations.') # noqa: T201 - selected_stn.loc[nan_loc, vs30_label] = get_vs30_ncm( - selected_stn.iloc[ # noqa: PD011 - nan_loc, list(selected_stn.keys()).index(lat_label) - ].values.tolist(), - selected_stn.iloc[ # noqa: PD011 - nan_loc, list(selected_stn.keys()).index(lon_label) - ].values.tolist(), + # Vs30 dispatch. + # + # All non-User-specified Vs30 paths route through OpenSHA. The + # vs30Config['Type'] string is either a canonical OpenSHA provider + # NAME (e.g. 'CGS/Wills VS30 Map (2015)') or a legacy substring + # ('Global Vs30 ...', 'Thompson ...') that get_site_vs30_from_opensha + # maps to a canonical NAME for backward compatibility. + # + # The NCM branch below is not exposed in the R2D UI; the underlying + # USGS web service has not been verified since 2021 (see get_vs30_ncm). + if 'NCM' in vs30Config['Type']: + # Not reachable from the R2D UI + if len(nan_loc): + print('CreateStation: Fetch National Crustal Model Vs for defined stations.') # noqa: T201 + selected_stn.loc[nan_loc, vs30_label] = get_vs30_ncm( + selected_stn.iloc[ # noqa: PD011 + nan_loc, list(selected_stn.keys()).index(lat_label) + ].values.tolist(), + selected_stn.iloc[ # noqa: PD011 + nan_loc, list(selected_stn.keys()).index(lon_label) + ].values.tolist(), + ) + elif len(nan_loc): + print( # noqa: T201 + f'CreateStation: Fetch Vs30 from OpenSHA ' + f'({vs30Config["Type"]}) for defined stations.' ) - if len(nan_loc) and vs30_tag == 0: - print('CreateStation: Fetch OpenSHA Vs30 map for defined stations.') # noqa: T201 selected_stn.loc[nan_loc, vs30_label] = get_site_vs30_from_opensha( selected_stn.iloc[ # noqa: PD011 nan_loc, list(selected_stn.keys()).index(lat_label) @@ -300,6 +320,7 @@ def create_stations( # noqa: C901, PLR0912, PLR0915 selected_stn.iloc[ # noqa: PD011 nan_loc, list(selected_stn.keys()).index(lon_label) ].values.tolist(), + vs30model=vs30Config['Type'], ) # Get zTR @@ -456,55 +477,65 @@ def create_stations( # noqa: C901, PLR0912, PLR0915 'chi', ]: user_param_list.pop(user_param_list.index(cur_param)) - # If z1pt0 is OpenSHA default model, use parallel processing to get z1pt0 - if z1Config['Type'] == 'OpenSHA default model': - z1_tag = z1Config['z1_tag'] - if z1_tag == 2: # noqa: PLR2004 - # num_cores = z1Config.get('num_cores', multiprocessing.cpu_count()) - num_cores = z1Config.get('num_cores', 1) - if num_cores == 1: - z1pt0_results = [ - get_site_z1pt0_from_opensha(lat, lon) + # Z1.0 / Z2.5 fetch from OpenSHA. + # + # z*Config['Type'] is one of: + # - 'User-specified' → values come from the site file or a constant + # - 'OpenSHA default model' → legacy: uses z*_tag for empirical / sequenced / null + # - → fetch that specific provider's value + # + # For both 'OpenSHA default model' (with tag=2) and a named OpenSHA + # model, we fetch all values up front (optionally in parallel) so the + # per-station loop below can just index into the results array. + _z1_model, _z1_fetch = _z_opensha_dispatch(z1Config, 'z1_tag') + if _z1_fetch: + num_cores = z1Config.get('num_cores', 1) + if num_cores == 1: + z1pt0_results = [ + get_site_z1pt0_from_opensha(lat, lon, model_name=_z1_model) + for lat, lon in zip( + selected_stn['Latitude'].tolist(), + selected_stn['Longitude'].tolist(), + ) + ] + else: + with tqdm_joblib( + tqdm(desc='Get z1pt0 from openSHA', total=selected_stn.shape[0]) + ) as progress_bar: # noqa: F841 + z1pt0_results = Parallel(n_jobs=num_cores)( + delayed(get_site_z1pt0_from_opensha)( + lat, lon, model_name=_z1_model + ) for lat, lon in zip( selected_stn['Latitude'].tolist(), selected_stn['Longitude'].tolist(), ) - ] - else: - with tqdm_joblib( - tqdm(desc='Get z1pt0 from openSHA', total=selected_stn.shape[0]) - ) as progress_bar: - z1pt0_results = Parallel(n_jobs=num_cores)( - delayed(get_site_z1pt0_from_opensha)(lat, lon) - for lat, lon in zip( - selected_stn['Latitude'].tolist(), - selected_stn['Longitude'].tolist(), - ) + ) + + _z25_model, _z25_fetch = _z_opensha_dispatch(z25Config, 'z25_tag') + if _z25_fetch: + num_cores = z25Config.get('num_cores', 1) + if num_cores == 1: + z2pt5_results = [ + get_site_z2pt5_from_opensha(lat, lon, model_name=_z25_model) + for lat, lon in zip( + selected_stn['Latitude'].tolist(), + selected_stn['Longitude'].tolist(), + ) + ] + else: + with tqdm_joblib( + tqdm(desc='Get z2pt5 from openSHA', total=selected_stn.shape[0]) + ) as progress_bar: # noqa: F841 + z2pt5_results = Parallel(n_jobs=num_cores)( + delayed(get_site_z2pt5_from_opensha)( + lat, lon, model_name=_z25_model ) - if z25Config['Type'] == 'OpenSHA default model': - z25_tag = z25Config['z25_tag'] - if z25_tag == 2: # noqa: PLR2004 - # num_cores = z25Config.get('num_cores', multiprocessing.cpu_count()) - num_cores = z25Config.get('num_cores', 1) - if num_cores == 1: - z2pt5_results = [ - get_site_z2pt5_from_opensha(lat, lon) for lat, lon in zip( selected_stn['Latitude'].tolist(), selected_stn['Longitude'].tolist(), ) - ] - else: - with tqdm_joblib( - tqdm(desc='Get z2pt5 from openSHA', total=selected_stn.shape[0]) - ) as progress_bar: # noqa: F841 - z2pt5_results = Parallel(n_jobs=num_cores)( - delayed(get_site_z2pt5_from_opensha)(lat, lon) - for lat, lon in zip( - selected_stn['Latitude'].tolist(), - selected_stn['Longitude'].tolist(), - ) - ) + ) ground_failure_input_keys = set() for ind in tqdm(range(selected_stn.shape[0]), desc='Stations'): @@ -559,6 +590,14 @@ def create_stations( # noqa: C901, PLR0912, PLR0915 elif z1_tag == 0: z1pt0 = get_z1(tmp.get('Vs30')) tmp.update({'z1pt0': z1pt0}) + elif z1Config['Type'] in _OPENSHA_BASIN_DEPTH_NAMES: + # Specific OpenSHA basin-depth model; fall back to the + # empirical Chiou & Youngs (2013) equation if the chosen + # model has no data at this site. + z1pt0 = z1pt0_results[ind] + if np.isnan(z1pt0): + z1pt0 = get_z1(tmp.get('Vs30')) + tmp.update({'z1pt0': z1pt0}) if (z25Config['Type'] == 'User-specified') and stn.get('z2pt5'): tmp.update({'z2pt5': stn.get('z2pt5')}) @@ -578,6 +617,14 @@ def create_stations( # noqa: C901, PLR0912, PLR0915 elif z25_tag == 0: z2pt5 = get_z25(tmp['z1pt0']) tmp.update({'z2pt5': z2pt5}) + elif z25Config['Type'] in _OPENSHA_BASIN_DEPTH_NAMES: + # Specific OpenSHA basin-depth model; fall back to the + # empirical Campbell & Bozorgnia (2013) equation if the + # chosen model has no data at this site. + z2pt5 = z2pt5_results[ind] + if np.isnan(z2pt5): + z2pt5 = get_z25(tmp['z1pt0']) + tmp.update({'z2pt5': z2pt5}) if 'DepthToRock' in stn.index: tmp.update({'DepthToRock': stn.get('DepthToRock')}) @@ -713,32 +760,6 @@ def create_gridded_stations( ) -def get_vs30_global(lat, lon): - """Interpolate global Vs30 at given latitude and longitude - Input: - lat: list of latitude - lon: list of longitude - Output: - vs30: list of vs30 - """ # noqa: D205, D400 - import os - import pickle - - from scipy import interpolate - - # Loading global Vs30 data - cwd = os.path.dirname(os.path.realpath(__file__)) # noqa: PTH120 - with open(cwd + '/database/site/global_vs30_4km.pkl', 'rb') as f: # noqa: PTH123 - vs30_global = pickle.load(f) # noqa: S301 - # Interpolation function (linear) - interpFunc = interpolate.interp2d( # noqa: N806 - vs30_global['Longitude'], vs30_global['Latitude'], vs30_global['Vs30'] - ) - vs30 = [float(interpFunc(x, y)) for x, y in zip(lon, lat)] - # return - return vs30 # noqa: DOC201, RET504, RUF100 - - def parallel_interpolation(func, lat, lon): """Interpolate data in parallel Input: @@ -751,40 +772,6 @@ def parallel_interpolation(func, lat, lon): return func(lat, lon) -def get_vs30_thompson(lat, lon): - """Interpolate global Vs30 at given latitude and longitude - Input: - lat: list of latitude - lon: list of longitude - Output: - vs30: list of vs30 - """ # noqa: D205, D400 - import os - import pickle - - from scipy import interpolate - - # Loading Thompson Vs30 data - cwd = os.path.dirname(os.path.realpath(__file__)) # noqa: PTH120 - with open(cwd + '/database/site/thompson_vs30_4km.pkl', 'rb') as f: # noqa: PTH123 - vs30_thompson = pickle.load(f) # noqa: S301 - # Interpolation function (linear) - vs30_thompson['Vs30'][vs30_thompson['Vs30'] < 0.1] = 760 # noqa: PLR2004 - interpFunc = interpolate.interp2d( # noqa: N806 - vs30_thompson['Longitude'], vs30_thompson['Latitude'], vs30_thompson['Vs30'] - ) - vs30 = [float(interpFunc(x, y)) for x, y in zip(lon, lat)] - - num_zeros = len([x for x in vs30 if x == 0]) - if num_zeros > 0: - # Thompson's map gives zero values for water-covered region and outside CA -> use 760 for default - print( # noqa: T201 - f'CreateStation: Warning - approximate 760 m/s for {num_zeros} sites not supported by Thompson Vs30 map (water/outside CA).' - ) - # return - return vs30 # noqa: DOC201, RET504, RUF100 - - def get_z1(vs30): """Compute z1 based on the prediction equation by Chiou and Youngs (2013) (unit of vs30 is meter/second and z1 is meter).""" return np.exp( @@ -866,6 +853,13 @@ def export_site_prop(stn_file, output_dir, filename): def get_zTR_ncm(lat, lon): # noqa: N802 """Call USGS National Crustal Model services for zTR https://earthquake.usgs.gov/nshmp/ncm + + NOTE: not currently reachable from the R2D UI (no UI option produces + a BedrockDepth Type containing 'NCM' / 'National Crustal Model'). The + request URL below appears to repeat `/ws/nshmp/ncm/` — looks like a + pre-existing typo from 2021; the endpoint may have moved or been + retired. Verify before re-exposing. + Input: lat: list of latitude lon: list of longitude @@ -878,6 +872,7 @@ def get_zTR_ncm(lat, lon): # noqa: N802 # Looping over sites for cur_lat, cur_lon in zip(lat, lon): + # `/ws/nshmp/ncm/ws/nshmp/ncm/` looks duplicated — likely a typo. url_geology = f'https://earthquake.usgs.gov/ws/nshmp/ncm/ws/nshmp/ncm/geologic-framework?location={cur_lat}%2C{cur_lon}' # geological data (depth to bedrock) r1 = requests.get(url_geology) # noqa: S113 @@ -900,6 +895,12 @@ def get_zTR_ncm(lat, lon): # noqa: N802 def get_vsp_ncm(lat, lon, depth): """Call USGS National Crustal Model services for Vs30 profile https://earthquake.usgs.gov/nshmp/ncm + + NOTE: only reachable through `get_vs30_ncm`, which is itself not + exposed in the R2D UI (no UI option produces a Vs30 Type containing + 'NCM'). The request URL has the same `/ws/nshmp/ncm/` repetition as + `get_zTR_ncm`; endpoint status unverified. + Input: lat: list of latitude lon: list of longitude @@ -914,6 +915,7 @@ def get_vsp_ncm(lat, lon, depth): # Looping over sites for cur_lat, cur_lon in zip(lat, lon): + # `/ws/nshmp/ncm/ws/nshmp/ncm/` looks duplicated — likely a typo. url_geophys = f'https://earthquake.usgs.gov/ws/nshmp/ncm/ws/nshmp/ncm/geophysical?location={cur_lat}%2C{cur_lon}&depths={depthMin}%2C{depthInc}%2C{depthMax}' r1 = requests.get(url_geophys) # noqa: S113 cur_res = r1.json() @@ -955,7 +957,13 @@ def compute_vs30_from_vsp(depthp, vsp): def get_vs30_ncm(lat, lon): - """Fetch Vs30 at given latitude and longitude from NCM + """Fetch Vs30 at given latitude and longitude from NCM. + + NOTE: not currently reachable from the R2D UI — the dispatch in the + Vs30 section triggers on `'NCM' in vs30Config['Type']`, but no R2D + Vs30 option produces such a Type string. The underlying USGS + /ws/nshmp/ncm endpoint status is unverified. + Input: lat: list of latitude lon: list of longitude diff --git a/modules/performRegionalEventSimulation/regionalGroundMotion/FetchOpenSHA.py b/modules/performRegionalEventSimulation/regionalGroundMotion/FetchOpenSHA.py index dcffbe103..a68667726 100644 --- a/modules/performRegionalEventSimulation/regionalGroundMotion/FetchOpenSHA.py +++ b/modules/performRegionalEventSimulation/regionalGroundMotion/FetchOpenSHA.py @@ -1006,7 +1006,54 @@ def get_IM( # noqa: C901, N802, D103 return res, station_info +# Canonical OpenSHA Vs30 provider NAME strings (matches `getSourceName()`). +# Used to validate / normalize user-supplied Vs30 Type strings. +_OPENSHA_VS30_NAMES = ( + 'Thompson VS30 Map (2022)', + 'Thompson VS30 Map (2020)', + 'Thompson VS30 Map (2018)', + 'CGS/Wills VS30 Map (2015)', + 'CGS/Wills Site Classification Map (2006)', + 'Global Vs30 from Topographic Slope (Wald & Allen 2008)', + 'Vs30 from various Community Velocity Models', +) + + +def _resolve_vs30_model_name(vs30model): + """Map a Vs30 Type string to a canonical OpenSHA provider NAME. + + Accepts a canonical NAME, a canonical NAME with a UI scope suffix + (e.g. " [California only]"), or a legacy substring from older R2D + configurations. Returns the canonical NAME so the rest of the code + can do exact name matching against `getSourceName()`. + """ + if vs30model in _OPENSHA_VS30_NAMES: + return vs30model + # Match by prefix to accept UI labels like " [California only]". + for canonical in _OPENSHA_VS30_NAMES: + if vs30model.startswith(canonical): + return canonical + # Legacy substrings (pre-2026 R2D configurations). + if 'Global Vs30' in vs30model: + return 'Global Vs30 from Topographic Slope (Wald & Allen 2008)' + if 'Wills' in vs30model and '2015' in vs30model: + return 'CGS/Wills VS30 Map (2015)' + if 'Wills' in vs30model and '2006' in vs30model: + return 'CGS/Wills Site Classification Map (2006)' + if 'Thompson' in vs30model and '2018' in vs30model: + return 'Thompson VS30 Map (2018)' + if 'Thompson' in vs30model and '2020' in vs30model: + return 'Thompson VS30 Map (2020)' + if 'Thompson' in vs30model: + # Unqualified or 2022-era "Thompson" string → newest map. + return 'Thompson VS30 Map (2022)' + # Fall through with the original string; OpenSHA will simply find no + # matching provider and the caller will see NaN values. + return vs30model + + def get_site_vs30_from_opensha(lat, lon, vs30model='CGS/Wills VS30 Map (2015)'): # noqa: D103 + vs30model = _resolve_vs30_model_name(vs30model) sites = ArrayList() # noqa: F405 num_sites = len(lat) for i in range(num_sites): @@ -1026,10 +1073,11 @@ def get_site_vs30_from_opensha(lat, lon, vs30model='CGS/Wills VS30 Map (2015)'): else: # noqa: RET508 continue - # The Wills 2015 map returns NaN for offshore sites; fall back to the - # global topographic-slope Vs30 model. Look up the fallback provider by - # name so an upstream reorder of the provider list does not silently - # route this code to the wrong dataset. + # The selected Vs30 map may return NaN for cells outside its coverage + # (e.g. Wills 2015 / Thompson outside California, offshore cells). Fall + # back to the global topographic-slope model for those sites. Look up + # the fallback provider by name so an upstream reorder of the provider + # list does not silently route this code to the wrong dataset. if any([np.isnan(x) for x in vs30]): # noqa: C419 fallback_name = 'Global Vs30 from Topographic Slope (Wald & Allen 2008)' fallback_provider_data = None @@ -1050,27 +1098,45 @@ def get_site_vs30_from_opensha(lat, lon, vs30model='CGS/Wills VS30 Map (2015)'): return vs30 -def get_site_z1pt0_from_opensha(lat, lon): # noqa: D103 +def _fetch_z_from_opensha(lat, lon, data_type, model_name): + """Fetch Z1.0 or Z2.5 (in km) at a single site from OpenSHA. + + When `model_name` is None or 'OpenSHA default model', returns the value + from the first provider in OpenSHA's default order that has non-NaN + data for the site (sequenced fallback). When `model_name` is a specific + OpenSHA basin-depth provider NAME (matching `getSourceName()`), returns + the value from that provider only; NaN if the provider has no data + for the site or is not in the list. + """ sites = ArrayList() # noqa: F405 sites.add(Site(Location(lat, lon))) # noqa: F405 siteDataProviders = OrderedSiteDataProviderList.createSiteDataProviderDefaults() # noqa: N806, F405 siteData = siteDataProviders.getAllAvailableData(sites) # noqa: N806 + + use_default_sequence = ( + model_name is None or model_name == 'OpenSHA default model' + ) + z = float('nan') for data in siteData: - if data.getValue(0).getDataType() == 'Depth to Vs = 1.0 km/sec': - z1pt0 = float(data.getValue(0).getValue()) - if not np.isnan(z1pt0): - break - return z1pt0 * 1000.0 + if str(data.getValue(0).getDataType()) != data_type: + continue + if not use_default_sequence and str(data.getSourceName()) != model_name: + continue + candidate = float(data.getValue(0).getValue()) + if not np.isnan(candidate): + z = candidate + break + if not use_default_sequence: + # Asked for a specific model and it returned NaN here. + break + return z -def get_site_z2pt5_from_opensha(lat, lon): # noqa: D103 - sites = ArrayList() # noqa: F405 - sites.add(Site(Location(lat, lon))) # noqa: F405 - siteDataProviders = OrderedSiteDataProviderList.createSiteDataProviderDefaults() # noqa: N806, F405 - siteData = siteDataProviders.getAllAvailableData(sites) # noqa: N806 - for data in siteData: - if data.getValue(0).getDataType() == 'Depth to Vs = 2.5 km/sec': - z2pt5 = float(data.getValue(0).getValue()) - if not np.isnan(z2pt5): - break - return z2pt5 * 1000.0 +def get_site_z1pt0_from_opensha(lat, lon, model_name=None): # noqa: D103 + z = _fetch_z_from_opensha(lat, lon, 'Depth to Vs = 1.0 km/sec', model_name) + return z * 1000.0 + + +def get_site_z2pt5_from_opensha(lat, lon, model_name=None): # noqa: D103 + z = _fetch_z_from_opensha(lat, lon, 'Depth to Vs = 2.5 km/sec', model_name) + return z * 1000.0 diff --git a/modules/performRegionalEventSimulation/regionalGroundMotion/ScenarioForecast.py b/modules/performRegionalEventSimulation/regionalGroundMotion/ScenarioForecast.py index a80670221..bcac4af9d 100644 --- a/modules/performRegionalEventSimulation/regionalGroundMotion/ScenarioForecast.py +++ b/modules/performRegionalEventSimulation/regionalGroundMotion/ScenarioForecast.py @@ -122,11 +122,11 @@ # shutil.rmtree(os.environ.get('OQ_DATADIR')) # os.makedirs(f"{os.environ.get('OQ_DATADIR')}") - # untar site databases + # untar site databases. global_zTR_4km is the depth-to-bedrock map used + # by ground-failure code (liquefaction/landslide); all Vs30 paths + # go through OpenSHA, so no Vs30 pickles need to be staged here. site_database = [ - 'global_vs30_4km.tar.gz', 'global_zTR_4km.tar.gz', - 'thompson_vs30_4km.tar.gz', ] print('HazardSimulation: Extracting site databases.') # noqa: T201 cwd = os.path.dirname(os.path.realpath(__file__)) # noqa: PTH120 diff --git a/modules/performRegionalEventSimulation/regionalGroundMotion/database/CMakeLists.txt b/modules/performRegionalEventSimulation/regionalGroundMotion/database/CMakeLists.txt index 0276b2ded..79a1c1cef 100644 --- a/modules/performRegionalEventSimulation/regionalGroundMotion/database/CMakeLists.txt +++ b/modules/performRegionalEventSimulation/regionalGroundMotion/database/CMakeLists.txt @@ -1,2 +1,3 @@ add_subdirectory(gmdb) add_subdirectory(groundfailure) +add_subdirectory(site) diff --git a/modules/performRegionalEventSimulation/regionalGroundMotion/database/site/CMakeLists.txt b/modules/performRegionalEventSimulation/regionalGroundMotion/database/site/CMakeLists.txt new file mode 100644 index 000000000..22e255992 --- /dev/null +++ b/modules/performRegionalEventSimulation/regionalGroundMotion/database/site/CMakeLists.txt @@ -0,0 +1,2 @@ +simcenter_add_file(NAME global_vs30_4km.tar.gz) +simcenter_add_file(NAME global_zTR_4km.tar.gz) diff --git a/modules/performRegionalEventSimulation/regionalGroundMotion/database/site/thompson_vs30_4km.tar.gz b/modules/performRegionalEventSimulation/regionalGroundMotion/database/site/thompson_vs30_4km.tar.gz deleted file mode 100644 index 439c6c91469f63e4c89c790be519af7e256dbb2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 257927 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