Closed brendanjmeade closed 2 months ago
CVXOPT and quadratic programming makes this possible and easy. See: celeri_western_north_america_qp.ipynb as a starting point. More do come.
These are nearly identical in practice, so we'll treat sign constraints as bounded between minimum and maximum values.
Add nine new columns to segment file:
ss_rate_bound_flag
: 0 or 1. If 0 there is not a bounded strike-slip constraint. If 1 there is a bounded strike-slip constraint.
ss_rate_bound_min
: minimum strike-slip rate.
ss_rate_bound_max
: maximum strike-slip rate.
ds_rate_bound_flag
: 0 or 1. If 0 there is not a bounded dip-slip constraint. If 1 there is a bounded dip-slip constraint.
ds_rate_bound_min
: minimum dip-slip rate.
ds_rate_bound_max
: maximum dip-slip rate.
ts_rate_bound_flag
: 0 or 1. If 0 there is not a bounded tensile-slip constraint. If 1 there is a bounded tensile-slip constraint.
ts_rate_bound_min
: minimum tensile-slip rate.
ts_rate_bound_max
: maximum tensile-slip rate.
Need to check on sign convention:
Thoughts @jploveless ?
Just want to clarify: are those parameters going into a .command
file, or are they new columns of a segment .csv
? Seems like the latter, but maybe there are some global settings that need to be applied in a .command
?
Great question. My current plan is new columns of the segment .csv
file.
I hadn't thought about global overrides but I can imagine something like command.ignore_all_slip_rate_constraints
. Do you have percolating ideas? Happy to consider other options.
No, that sounds good! I was just clarifying because the last comment said "specifying bounds in a command file".
I'm not opposed to global overrides, but it definitely sounds like something I'd forget to turn off and then scratch my head for a while!
I totally agree that I'd forget any command overrides as well. I fixed the comment that had the error in it. Thanks!
Summary: Solve the block model problem with a bounded solver so that TDE slip deficit (or fault coupling) rates can be bounded within a specified range. There are three cases to consider:
Classic linear unbounded solve
np.linalg.inv
Slip deficit rate bounded solve
Implementation (incomplete):
scipy.optimize.lsq_linear
Pros:
Cons:
C. Coupling rate bounded solve
scipy.optimize.lsq_linear
with changing boundsestimation_bounded = copy.deepcopy(estimation) estimation_bounded.state_vector = res.x celeri.post_process_estimation(estimation_bounded, operators, station, index)