ZeyuJin / geodetic_inversion

homogeneous/layered inversion using InSAR/GPS
30 stars 15 forks source link

geodetic_inversion

This repo homogeneous/layered inversion using InSAR/GPS

New: currently the repo also supports non-linear fault construction and inversion!

image

References:

(Please cite those works if using our codes)

Jin, Z., & Fialko, Y. (2020). Finite slip models of the 2019 Ridgecrest earthquake sequence constrained by space geodetic data and aftershock locations. Bull. Seism. Soc. Am., 110, 1660–1679.

Jin, Z., & Fialko, Y. (2021). Coseismic and early postseismic deformation due to the 2021 M7. 4 Maduo (China) earthquake. Geophysical Research Letters, 48(21), e2021GL095213.

Jia, Z., Jin, Z., Marchandon, M., Ulrich, T., Gabriel, A. A., Fan, W., ... & Fialko, Y. (2023). The complex dynamics of the 2023 Kahramanmaraş, Turkey, M w 7.8-7.7 earthquake doublet. Science, 381(6661), 985-990.

Jin, Z., Fialko, Y., Yang, H., & Li, Y. (2023). Transient deformation excited by the 2021 M7. 4 Maduo (China) earthquake: Evidence of a deep shear zone. Journal of Geophysical Research: Solid Earth, 128(8), e2023JB026643.


Step 1 ~ 2 are written in the file main_detrend_inversion.m

Step 0: setup your MATLAB, CSHELL and GMT paths.

Please include the MATLABPATH for all directories.

Step 1: data cleaning using clean_insar_data.m

% remove some near-field unwrapping errors manually first
clean_insar_data; 

If you open clean_insar_data.m, you need to specify following information to clean the data:

Then the subroutine runs as (inside clean_insar_data.m):

% scale = -lambda / 4 / pi
% scale = -4*pi if the insar_file is an offset grid
% los_max is used just for plot (cm)
% detrend = 1 means that you apply for a detrend with the topography
mask_insar_phase(this_track, insar_file, mask_file, scale, 'los_max', 80, 'detrend', 0);

This step would output a subsampled grid file called "unwrap_clean_sample.grd", in 100 meters resolution as default.

Step 2: detrend the phase and remove the phase ambiguity

If we have enough far-field GPS data, we could use those GPS data to invert a coarse slip model to detrend the unwrapped phase. \ In cases such as Pamir and Qinghai earthquake, since we do not have enough GPS sites covered, we could just assume a far-field pixel that corresponds to zero displacement.

% grdin = '/Users/zej011/coseismic/DES5/LOS2/unwrap_clean_sample.grd';
% grdout = '/Users/zej011/coseismic/DES5/LOS2/los_clean_detrend.grd';
% lonf = 73.215150;   latf = 37.754558;  (lonf/latf is the coordinate of pixel point)
% ref_lon = 71;  lonc = 72;  latc = 38.5;  (lonc/latc is the coordinate of reference point (0,0))
% threshold = 0.5; (pixels within 500m would be averaged in order to get the value at that point)
remove_ref_from_grid(grdin,grdout,lonf,latf,ref_lon,threshold);

(Optional) apply the sign mask for the detrended offset data

Because offset data are noisy than phase ones, sometimes you even need to apply a sign mask across the fault. In each directory (this_track), just put two polygons named with clean_left.txt and clean_right.txt that surround the left and right part of the offset map.

cd(this_track);
movefile los_clean_detrend.grd los_clean_unmask.grd
sign_mask_offset(this_track, 'los_clean_unmasked.grd');

Step 3 ~ 7 are written in the file main_detrend_inversion.m

Step 3: apply quad-tree sampling to all detrended data (LOS/RNG/AZO)

Step 4: build the fault geometry

Step 5: inversion using first downsampled data

Step 6: iterative sampling data using the model predictions (Wang and Fialko, GRL 2015)

iter_step = 1;  % usually just one iteration is enough to rule out samples on noisy pixels
resamp_insar_data(los_list, Nmin, Nmax, iter_step, 'fault', fault_file, 'dec',2, 'lonc',72, 'latc',38.5, 'ref_lon',71);

Step 7: inversion using resampled data

[slip_model,rms,model_roughness] = make_fault_from_insar(slip_model_vs,slip_model_ds,iter_step, ...
                     'segment_smooth_file',segment_file,'intersect_smooth_file',intersect_file,'fault',fault_file, ...
                     'lonc',72,'latc',38.5,'ref_lon',71);

Tha parameters are the same as Step 5.


Note: The model geometry of each patch is defined as follows:

               N
              /
             /| strike
     Ref:-> @------------------------E
            |\        p .            \ W
            :-\      i .              \ i
            |  \    l .                \ d
            :90 \  S .                  \ t
            |-dip\  .                    \ h
            :     \. | rake               \ 
           -Z      -------------------------
                          L e n g t h

slip_model is a matrix that defines the model parameters:

  1. Fault segment index
  2. Fault patch index
  3. Number of patches in this layer
  4. X(Ref) of each rectangular patch (East is positive)
  5. Y(Ref) of each rectangular patch (North is positive)
  6. Z(Ref) of each rectangular patch (Up is positive)
  7. Along-strike length of each patch
  8. Down-dip length of each patch
  9. Strike angle of each patch
  10. Dip angle of each patch
  11. Topography on the top surface of each patch
  12. Strike-slip of each patch (default is cm)
  13. Dip-slip of each patch (default is cm)

The plot of model in the example is displayed as follows: model ASC100 DES5