Skip to content
Snippets Groups Projects
Commit 6084bf27 authored by Clayton, Brandon Scott's avatar Clayton, Brandon Scott
Browse files

Merge branch 'main' into 'production'

Production Release | nshmp-haz

See merge request !726
parents 8f1b4095 c5631ca0
No related branches found
No related tags found
1 merge request!726Production Release | nshmp-haz
Pipeline #278087 passed
......@@ -3,13 +3,10 @@
See the [examples](examples) directory as a starting point for command-line use of
`nshmp-haz`.
[Matlab](matlab) provides scripts for how to complete calculations for ground motion models
used in this repository.
The [Matlab](matlab) directory provides scripts for how to perform hazard calculations
in this repository.
For hazard calculations based on code in this repository, please see the Matlab scripts in
[Matlab](matlab).
To use the `nshmp-haz` ground motion model implementations directly, please see the Matlab
To perform ground motion model (GMM) implementations directly, please see the Matlab
scripts in [`nshmp-ws`](../../nshmp-ws/etc/matlab).
[Nshm](nshm) contains site lists and map polygons commonly used by the USGS NSHMP.
......
dip,
0,
2.5,
5,
7.5,
10,
12.5,
15,
17.5,
20,
22.5,
25,
27.5,
30,
32.5,
35,
37.5,
40,
42.5,
45,
47.5,
50,
52.5,
55,
57.5,
60,
62.5,
65,
67.5,
70,
72.5,
75,
77.5,
80,
82.5,
85,
87.5,
90,
\ No newline at end of file
%% nshmp-haz Ground Motion Model (GMM) batch processing example script
clear;
%% Read CSV file of GMM inputs
%
% Each column of the CSV file is a GMM input parameter with the
% first row dictating that GMM input field.
%
% Example CSV to change only dip:
% dip,
% 0.0,
% 45.0,
% 90.0,
%
% For a full list of GMM input paramters see:
% https://earthquake.usgs.gov/nshmp/docs/nshmp-lib/gov/usgs/earthquake/nshmp/gmm/GmmInput.html
%
% If 'null' is supplied as a value or a GMM input field and values are
% not given, the default values are used:
% https://earthquake.usgs.gov/nshmp/docs/nshmp-lib/gov/usgs/earthquake/nshmp/gmm/GmmInput.Builder.html#withDefaults()
inputs = fileread('gmm-inputs.csv');
%% URL to POST the CSV file of GMM inputs
%
% Must update the URL host if not on localhost.
%
% The GMMs must be specified in the URL query string.
%
% All GMM services are available to call for batch processing.
host = 'http://localhost:8080';
service = '/nshmp-haz/gmm/spectra';
query = 'gmm=AB_06_PRIME&gmm=CAMPBELL_03&gmm=FRANKEL_96';
url = strcat(host, service, '?', query);
%% Set the response to JSON.
%
% The HTTP POST response is in JSON format.
options = weboptions('ContentType', 'json');
%% Conduct HTTP POST Request
%
% Conduct a HTTP POST request, sending the CSV file of GMM inputs.
%
% The POST response is loaded into a structure
% following the returned JSON structure.
svcResponse = webwrite(url, inputs, options);
%% Check Response
%
% Check to see if the response returned an error and check
% to see if the field 'response' exists in the structure.
%
% If the URL does not contain a query string of GMMs the response
% returned will be the service usage.
if strcmp('error', svcResponse.status) || ~isfield(svcResponse, 'response')
return;
end
%% Retreive the data
%
% Loop through each response spectrum response and obtain the means
% and sigmas.
for response = svcResponse.response'
% Request structure contains the GMMs and GMM input parameters used
request = response.request;
% The GMMs used for the calculation
gmms = request.gmms;
% The GMM input parameters used for the calculation
gmmInput = request.input;
% Get the means
for means = response.means.data
data = means.data;
xMeans = data.xs;
yMeans = data.ys;
end
% Get the sigmas
for sigmas = response.sigmas.data
data = sigmas.data;
xSigmas = data.xs;
ySigmas = data.ys;
end
end
%% nshmp-haz Ground Motion Model (GMM) calculator example script
% =========================================================================
% This script provides instruction on how to access ground motion models
% (GMMs) implemented in the nshmp-haz library.
%
% See the README for instructions on how to set up Matlab to use nshmp-haz.
% =========================================================================
clear
% Specify path to nshmp-haz library:
nshmpHaz = '/path/to/repository/nshmp-haz/dist/nshmp-haz.jar';
% Make Matlab aware of nshmp-haz by adding it to the 'dynamic' classpath:
javaaddpath(nshmpHaz);
% Alternatively, one can add nshmp-haz to the faster 'static' classpath by
% saving a file with the name `javaclasspath.txt` to the Matlab preferences
% directory, as specified by the `prefdir` command, and with single line:
%
% /path/to/repository/nshmp-haz/dist/nshmp-haz.jar
%
% Although the static classpath is generally a little faster, you must
% restart Matlab any time nshmp-haz.jar is rebuilt with updated code.
import gov.usgs.earthquake.nshmp.etc.*
% =========================================================================
% Single model ground motion calculation:
% Initialize calculator:
hazMat = HazMat.init(nshmpHaz);
% Note that hazMat is stateless and reusable and should therefore be
% initialized external to this script if doing many calculations.
% Set up a GMM input parameter object. These data are a source and site
% parameterization that will satisfy all currently implemented Gmms. Note
% that not all models will necessarily use all parameters.
input = GmmParams();
input.Mw = 6.5; % moment magnitude
input.rJB = 5.0; % Joyner-Boore distance
input.rRup = 5.1; % distance to closest point on rupture surface
input.rX = 5.1; % distance from source trace; hanging (+); foot (-) wall
input.dip = 90.0; % in degrees
input.width = 10.0; % in km
input.zTop = 1.0; % in km
input.zHyp = 6.0; % in km
input.rake = 0.0; % in degrees
input.vs30 = 760.0; % in m/s
input.z2p5 = NaN; % in km; NaN triggers default basin depth model
input.z1p0 = NaN; % in km; NaN triggers default basin depth model
% Specify a ground motion model. GMM identifiers:
% https://earthquake.usgs.gov/nshmp/docs/nshmp-lib/gov/usgs/earthquake/nshmp/gmm/Gmm.html
gmm = 'ASK_14';
% Specify an intensity measure type (IMT). IMT identifiers:
% https://earthquake.usgs.gov/nshmp/docs/nshmp-lib/gov/usgs/earthquake/nshmp/gmm/Imt.html
imt = 'PGA';
% Do a calculation. The MatUtil.calc(gmm, imt, gmmInput) method returns an
% array of [ln(median ground motion), sigma]
result = hazMat.gmmMean(gmm, imt, input)
% =========================================================================
% Determinisitic response spectrum calculation:
% The object returned by the MatUtil.spectrum(gmm, gmmInput) method may
% be dumped into a struct.
spectrumResult = struct(hazMat.gmmSpectrum(gmm, input))
% =========================================================================
......@@ -5,7 +5,7 @@
% Author: Demi Girot (dgirot@usgs.gov)
% Peter Powers (pmpowers@usgs.gov)
%
% Updated: 05/16/2023
% Updated: 05/23/2023
%
% This script demonstrates how to call web services for the hazard
% calculations implemented in USGS National Sesmic Hazard Models and plot
......@@ -29,8 +29,10 @@ urlbase = "https://earthquake.usgs.gov/ws/nshmp/conus-2018/dynamic/hazard/";
% If you are running nshmp-haz locally, use this URL:
% urlbase = "http://localhost:8080/hazard/";
% Struct of input parameters:
% Location input for plot title
at.location = 'Denver, Colorado';
% Struct of input parameters:
in.longitude = -104.992;
in.latitude = 39.74;
in.vs30 = 760;
......@@ -51,7 +53,10 @@ function plotHazard(hazard, in, at)
plot_handles = [];
legend_labels = {};
% Struct for hazard data
data = hazard.data;
% imt display in plot title
imt = hazard.imt.display;
for j = 1 : length(data)
......@@ -76,14 +81,12 @@ function plotHazard(hazard, in, at)
xlabel('Ground Motion (g)')
ylabel('Annual Frequency of Exceedance')
title(string(at.location),'FontSize',20)
subtitle(['(' num2str(in.latitude) ',' num2str(in.longitude) '), ' num2str(imt)],'FontSize',16)
subtitle(['(' num2str(in.latitude) ',' num2str(in.longitude) '), '...
num2str(imt)],'FontSize',16)
set(gca,'FontSize',20)
legend( ...
plot_handles,legend_labels, ...
'Location','best', ...
'Interpreter', 'none');
legend(plot_handles,legend_labels,'Location','best');
end
......@@ -101,6 +104,7 @@ url = url + ...
"&maxdir=" + string(in.maxdir) + ...
"&imt=" + string(in.imt);
% Timeout increased to compute hazard calculations
options = weboptions('Timeout',30);
response = webread(url,options);
......
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Response spectra web service example
%
% Author: Demi Girot (dgirot@usgs.gov)
% Peter Powers (pmpowers@usgs.gov)
%
% Created: 09/16/2021
% Updated: 01/12/2022
%
% This script assembles a response spectra web service URL request, makes
% the request, places the result in a struct, and generates a simple plot.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Create web service URL
clearvars
% The root url for the response spectra web service
urlbase = "https://staging-earthquake.usgs.gov/ws/nshmp/data/gmm/spectra?";
% The ground motion models (GMMs) of interest
%
% For allowed identifiers, see:
% https://earthquake.usgs.gov/nshmp/docs/nshmp-lib/gov/usgs/earthquake/nshmp/gmm/Gmm.html
gmms = ["BJF_97" "CB_03" "CY_14"];
% Ground motion model parameters
Mw = 6.5;
dip = 90;
rake = 0;
width = 14;
rJB = 10;
rRup = 10.012;
rX = 10;
vs30 = 760;
zHyp = 7.5;
zTop = 0.5;
url = createUrl( ...
urlbase, gmms, ...
Mw, dip, rake, width, rJB, rRup, rX, vs30, zHyp, zTop);
%% Call web service
% Open a browser window with the web service URL to show the JSON response
web(url);
% Call the web service and place response in a struct
data = webread(url);
%% Summary of each GMM dataset
means = data.response.means.data;
sigmas = data.response.sigmas.data;
c = newline;
for i=1:length(means)
gmm = ...
"GMM: " + means(i).label + c + ...
"Periods: " + mat2str(means(i).data.xs') + c + ...
"Means: " + mat2str(means(i).data.ys') + c + ...
"Sigmas: " + mat2str(sigmas(i).data.ys')
end
%% Make a simple plot of means data with epistemic uncertainty from web
% service response
figure(1)
cla
plot_handles = [];
legend_labels = {};
% loop means response array
for i = 1:length(means)
disp(means(i))
gmm_id = means(i).id;
gmm_label = means(i).label;
gmm_xs = means(i).data.xs;
gmm_ys = means(i).data.ys;
epi_tree = means(i).tree;
% Plot the total spectrum
PH = semilogx(gmm_xs, gmm_ys, 'LineWidth', 2);
hold on; grid on
plot_handles = [plot_handles PH];
legend_labels{end+1} = gmm_id;
% Plot epistemic spectra, if present
if ~isempty(epi_tree)
for j = 1 : length(epi_tree)
epi_branch = epi_tree(j);
epi_label = epi_branch.id;
epi_ys = epi_branch.values;
PHE = semilogx(gmm_xs, epi_ys,'LineWidth',1,'LineStyle','--','Color',PH.Color);
plot_handles = [plot_handles PHE];
legend_labels{end+1} = [gmm_id ' ' epi_label];
end
end
end
xlabel('Periods (sec)','FontSize',12)
ylabel('Median Ground Motion (g)','FontSize',12)
title('Ground Motion vs Response Spectra (Means)', 'FontSize', 14)
axis([0.001 10 0.005 0.8]);
set(gca, 'FontSize', 12);
set(gca, 'XTick', [0.01 0.1 1 10]);
set(gca, 'XTickLabel', {'0.01','0.1','1','10'});
l = legend(plot_handles, legend_labels, 'Location', 'northwest');
set(l, 'Interpreter', 'none')
%% Build URL function
function url = createUrl( ...
urlbase, gmms, ...
Mw, dip, rake, width, rJB, rRup, rX, vs30, zHyp, zTop)
url = urlbase;
for i = 1:size(gmms, 2)
if i == 1
url = url + "gmm=" + gmms(i);
else
url = url + "&gmm=" + gmms(i);
end
end
url = url + ...
"&Mw=" + num2str(Mw) + ...
"&dip=" + num2str(dip) + ...
"&rake=" + num2str(rake) + ...
"&width=" + num2str(width) + ...
"&rJB=" + num2str(rJB) + ...
"&rRup=" + num2str(rRup) + ...
"&rX=" + num2str(rX) + ...
"&vs30=" + num2str(vs30) + ...
"&zHyp=" + num2str(zHyp) + ...
"&zTop=" + num2str(zTop);
end
......@@ -9,12 +9,12 @@ nshms:
year: 2023
deployments:
development:
instanceType: t4g.xlarge
instanceType: c7g.4xlarge
staging:
instanceType: t4g.2xlarge
instanceType: c7g.8xlarge
# TODO: Add to production when model is stable
# production:
# instanceType: c7g.4xlarge
# instanceType: c7g.8xlarge
# CONUS 2018 NSHM
-
......@@ -23,11 +23,11 @@ nshms:
year: 2018
deployments:
development:
instanceType: t4g.2xlarge
instanceType: c7g.4xlarge
staging:
instanceType: t4g.2xlarge
production:
instanceType: c7g.8xlarge
production:
instanceType: c7g.12xlarge
# CONUS 2023 NSHM
-
......@@ -36,12 +36,12 @@ nshms:
year: 2023
deployments:
development:
instanceType: t4g.2xlarge
instanceType: c7g.4xlarge
staging:
instanceType: t4g.2xlarge
instanceType: c7g.8xlarge
# TODO: Add to production when model is stable
# production:
# instanceType: c7g.8xlarge
# instanceType: c7g.12xlarge
# Hawaii 2021 NSHM
-
......@@ -50,8 +50,8 @@ nshms:
year: 2021
deployments:
development:
instanceType: t4g.xlarge
instanceType: c7g.4xlarge
staging:
instanceType: t4g.2xlarge
instanceType: c7g.8xlarge
production:
instanceType: c7g.4xlarge
instanceType: c7g.8xlarge
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment