|
|
@ -152,9 +152,11 @@ def foreshore_slope_from_profile(profile_x, profile_z, tide, runup_function, **k
|
|
|
|
return None
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
# Initalize estimates
|
|
|
|
# Initalize estimates
|
|
|
|
max_number_iterations = 20
|
|
|
|
max_number_iterations = 30
|
|
|
|
iteration_count = 0
|
|
|
|
iteration_count = 0
|
|
|
|
min_accuracy = 0.001
|
|
|
|
averaged_accuracy = 0.03 # if slopes within this amount, average after max number of iterations
|
|
|
|
|
|
|
|
acceptable_accuracy = 0.01 # if slopes within this amount, accept after max number of iterations
|
|
|
|
|
|
|
|
preferred_accuracy = 0.001 # if slopes within this amount, accept
|
|
|
|
beta = 0.05
|
|
|
|
beta = 0.05
|
|
|
|
|
|
|
|
|
|
|
|
while True:
|
|
|
|
while True:
|
|
|
@ -173,12 +175,17 @@ def foreshore_slope_from_profile(profile_x, profile_z, tide, runup_function, **k
|
|
|
|
return None
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
# If slopes do not change much between interactions, return the slope
|
|
|
|
# If slopes do not change much between interactions, return the slope
|
|
|
|
if abs(beta_new - beta) < min_accuracy:
|
|
|
|
if abs(beta_new - beta) < preferred_accuracy:
|
|
|
|
return beta
|
|
|
|
return beta
|
|
|
|
|
|
|
|
|
|
|
|
# If we can't converge a solution, return None
|
|
|
|
# If we can't converge a solution, return None
|
|
|
|
if iteration_count > max_number_iterations:
|
|
|
|
if iteration_count > max_number_iterations:
|
|
|
|
return None
|
|
|
|
if abs(beta_new - beta) < acceptable_accuracy:
|
|
|
|
|
|
|
|
return beta
|
|
|
|
|
|
|
|
elif abs(beta_new - beta) < averaged_accuracy:
|
|
|
|
|
|
|
|
return (beta_new + beta) / 2
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
beta = beta_new
|
|
|
|
beta = beta_new
|
|
|
|
iteration_count += 1
|
|
|
|
iteration_count += 1
|
|
|
@ -230,7 +237,7 @@ def slope_from_profile(profile_x, profile_z, top_elevation, btm_elevation, metho
|
|
|
|
return -(z_top - z_btm) / (x_top - x_btm)
|
|
|
|
return -(z_top - z_btm) / (x_top - x_btm)
|
|
|
|
|
|
|
|
|
|
|
|
elif method == "least_squares":
|
|
|
|
elif method == "least_squares":
|
|
|
|
profile_mask = [True if end_points["top"]["x"] < pts < end_points["btm"]["x"] else False for pts in x]
|
|
|
|
profile_mask = [True if end_points["top"]["x"] < pts < end_points["btm"]["x"] else False for pts in profile_x]
|
|
|
|
slope_x = np.array(profile_x)[profile_mask].tolist()
|
|
|
|
slope_x = np.array(profile_x)[profile_mask].tolist()
|
|
|
|
slope_z = np.array(profile_z)[profile_mask].tolist()
|
|
|
|
slope_z = np.array(profile_z)[profile_mask].tolist()
|
|
|
|
slope, _, _, _, _ = stats.linregress(slope_x, slope_z)
|
|
|
|
slope, _, _, _, _ = stats.linregress(slope_x, slope_z)
|
|
|
|