260 lines
17 KiB
YAML
260 lines
17 KiB
YAML
version: 3
|
|
|
|
#################################################
|
|
# computational domian #
|
|
#################################################
|
|
domain:
|
|
min_max_dep: [-10, 10] # depth in km
|
|
min_max_lat: [37.7, 42.3] # latitude in degree
|
|
min_max_lon: [22.7, 27.3] # longitude in degree
|
|
n_rtp: [10, 50, 50] # number of nodes in depth,latitude,longitude direction
|
|
|
|
#################################################
|
|
# traveltime data file path #
|
|
#################################################
|
|
source:
|
|
src_rec_file: OUTPUT_FILES/src_rec_file_forward.dat # source receiver file path
|
|
swap_src_rec: true # swap source and receiver
|
|
|
|
#################################################
|
|
# initial model file path #
|
|
#################################################
|
|
model:
|
|
init_model_path: ./test_model_init.h5 # path to initial model file
|
|
# model_1d_name: dummy_model_1d_name # 1D model name used in teleseismic 2D solver (iasp91, ak135, user_defined is available), defined in include/1d_model.h
|
|
|
|
#################################################
|
|
# parallel computation settings #
|
|
#################################################
|
|
parallel: # parameters for parallel computation
|
|
n_sims: 1 # number of simultanoues runs (parallel the sources)
|
|
ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain)
|
|
nproc_sub: 1 # number of processors for sweep parallelization (parallel the fast sweep method)
|
|
use_gpu: false # true if use gpu (EXPERIMENTAL)
|
|
|
|
############################################
|
|
# output file setting #
|
|
############################################
|
|
output_setting:
|
|
output_dir: ./OUTPUT_FILES/ # path to output director (default is ./OUTPUT_FILES/)
|
|
output_source_field: true # output the calculated field of all sources
|
|
output_model_dat: false # output model_parameters_inv_0000.dat (data in text format) or not.
|
|
output_final_model: true # output merged final model (final_model.h5) or not.
|
|
output_in_process: true # output model at each inv iteration or not.
|
|
output_in_process_data: true # output src_rec_file at each inv iteration or not.
|
|
single_precision_output: false # output results in single precision or not.
|
|
verbose_output_level: 1 # output internal parameters, if no, only model parameters are out.
|
|
output_file_format: 0
|
|
|
|
#################################################
|
|
# inversion or forward modeling #
|
|
#################################################
|
|
# run mode
|
|
# 0 for forward simulation only,
|
|
# 1 for inversion
|
|
# 2 for earthquake relocation
|
|
# 3 for inversion + earthquake relocation
|
|
run_mode: 1
|
|
|
|
###################################################
|
|
# model update parameters setting #
|
|
###################################################
|
|
model_update:
|
|
max_iterations: 3 # maximum number of inversion iterations
|
|
optim_method: 0 # optimization method. 0 : grad_descent, 1 : halve-stepping, 2 : lbfgs (EXPERIMENTAL)
|
|
|
|
#common parameters for all optim methods
|
|
step_length: 0.01 # the initial step length of model perturbation. 0.01 means maximum 1% perturbation for each iteration.
|
|
|
|
# parameters for optim_method 0 (gradient_descent)
|
|
optim_method_0:
|
|
step_method: 1 # the method to modulate step size. 0: according to objective function; 1: according to gradient direction
|
|
# if step_method:0. if objective function increase, step size -> step length * step_length_decay.
|
|
step_length_decay: 0.9 # default: 0.9
|
|
# if step_method:1. if the angle between the current and the previous gradients is greater than step_length_gradient_angle, step size -> step length * step_length_change[0].
|
|
# otherwise, step size -> step length * step_length_change[1].
|
|
step_length_gradient_angle: 120 # default: 120.0
|
|
step_length_change: [0.5, 1.2] # default: [0.5,1.2]
|
|
# Kdensity_coe is used to rescale the final kernel: kernel -> kernel / pow(density of kernel, Kdensity_coe). if Kdensity_coe > 0, the region with less data will be enhanced during the inversion
|
|
# e.g., if Kdensity_coe = 0, kernel remains upchanged; if Kdensity_coe = 1, kernel is normalized. 0.5 or less is recommended if really required.
|
|
Kdensity_coe: 0 # default: 0.0, range: 0.0 - 1.0
|
|
|
|
# parameters for optim_method 1 (halve-stepping) or 2 (lbfgs)
|
|
optim_method_1_2:
|
|
max_sub_iterations: 20 # maximum number of each sub-iteration
|
|
regularization_weight: 0.5 # weight value for regularization (lbfgs mode only)
|
|
coefs_regulalization_rtp: [1, 1, 1] # regularization coefficients for rtp (lbfgs mode only)
|
|
|
|
# smoothing
|
|
smoothing:
|
|
smooth_method: 0 # 0: multiparametrization, 1: laplacian smoothing (EXPERIMENTAL)
|
|
l_smooth_rtp: [1, 0.0174533, 0.0174533] # smoothing coefficients for laplacian smoothing
|
|
|
|
# parameters for smooth method 0 (multigrid model parametrization)
|
|
# inversion grid can be viewed in OUTPUT_FILES/inversion_grid.txt
|
|
n_inversion_grid: 5 # number of inversion grid sets
|
|
|
|
# settings for flexible inversion grid
|
|
dep_inv: [-10, -7.5, -5, -2.5, 0, 2.5, 5, 7.5, 10] # inversion grid for vel in depth (km)
|
|
lat_inv: [37.7, 38.16, 38.62, 39.08, 39.54, 40.0, 40.46, 40.92, 41.38, 41.84, 42.3] # inversion grid for vel in latitude (degree)
|
|
lon_inv: [22.7, 23.06, 23.42, 23.78, 24.14, 24.5, 24.86, 25.22, 25.58, 25.94, 26.3, 26.66, 27.02, 27.3] # inversion grid for vel in longitude (degree)
|
|
trapezoid: [1, 0, 50] # usually set as [1.0, 0.0, 50.0] (default)
|
|
|
|
# if we want to use another inversion grid for inverting anisotropy, set invgrid_ani: true (default: false)
|
|
invgrid_ani: false
|
|
# settings for flexible inversion grid for anisotropy
|
|
dep_inv_ani: [] # inversion grid for ani in depth (km)
|
|
lat_inv_ani: [] # inversion grid for ani in latitude (degree)
|
|
lon_inv_ani: [] # inversion grid for ani in longitude (degree)
|
|
trapezoid_ani: [1, 0, 50] # usually set as [1.0, 0.0, 50.0] (default)
|
|
|
|
# Carefully change trapezoid and trapezoid_ani, if you really want to use trapezoid inversion grid, increasing the inversion grid spacing with depth to account for the worse data coverage in greater depths.
|
|
# The trapezoid_ inversion grid with index (i,j,k) in longitude, latitude, and depth is defined as:
|
|
# if dep_inv[k] < trapezoid[1], lon = lon_inv[i];
|
|
# lat = lat_inv[j];
|
|
# dep = dep_inv[k];
|
|
# if trapezoid[1] <= dep_inv[k] < trapezoid[2], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0];
|
|
# lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0];
|
|
# dep = dep_inv[k];
|
|
# if trapezoid[2] <= dep_inv[k], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*trapezoid[0];
|
|
# lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*trapezoid[0];
|
|
# dep = dep_inv[k];
|
|
# The shape of trapezoid inversion gird (x) looks like:
|
|
#
|
|
# lon_inv[0] [1] [2] [3] [4]
|
|
# |<-------- (lon_inv[end] - lon_inv[0]) ---->|
|
|
# dep_inv[0] | x x x x x |
|
|
# | |
|
|
# dep_inv[1] | x x x x x |
|
|
# | |
|
|
# dep_inv[2] = trapezoid[1] / x x x x x \
|
|
# / \
|
|
# dep_inv[3] / x x x x x \
|
|
# / \
|
|
# dep_inv[4] = trapezoid[2] / x x x x x \
|
|
# | |
|
|
# dep_inv[5] | x x x x x |
|
|
# | |
|
|
# dep_inv[6] | x x x x x |
|
|
# |<---- trapezoid[0]* (lon_inv[end] - lon_inv[0]) ------>|
|
|
|
|
# inversion grid volume rescale (kernel -> kernel / volume of inversion grid mesh),
|
|
# this precondition may be carefully applied if the sizes of inversion grids are unbalanced
|
|
invgrid_volume_rescale: true
|
|
|
|
# path to station correction file (under development)
|
|
use_sta_correction: false
|
|
# sta_correction_file: dummy_sta_correction_file # station correction file path
|
|
step_length_sc: 0.001 # step length relate to the update of station correction terms
|
|
|
|
|
|
# In the following data subsection, XXX_weight means a weight is assigned to the data, influencing the objective function and gradient
|
|
# XXX_weight : [d1,d2,w1,w2] means:
|
|
# if XXX < d1, weight = w1
|
|
# if d1 <= XXX < d2, weight = w1 + (XXX-d1)/(d2-d1)*(w2-w1), (linear interpolation)
|
|
# if d2 <= XXX , weight = w2
|
|
# You can easily set w1 = w2 = 1.0 to normalize the weight related to XXX.
|
|
# -------------- using absolute traveltime data --------------
|
|
abs_time:
|
|
use_abs_time: true # 'true' for using absolute traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section)
|
|
residual_weight: [1, 3, 1, 1] # XXX is the absolute traveltime residual (second) = abs(t^{obs}_{n,i} - t^{syn}_{n,j})
|
|
distance_weight: [50, 150, 1, 1] # XXX is epicenter distance (km) between the source and receiver related to the data
|
|
|
|
# -------------- using common source differential traveltime data --------------
|
|
cs_dif_time:
|
|
use_cs_time: false # 'true' for using common source differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section)
|
|
residual_weight: [1, 3, 1, 0.1] # XXX is the common source differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{n,j} - t^{syn}_{n,i} + t^{syn}_{n,j}).
|
|
azimuthal_weight: [15, 30, 1, 0.1] # XXX is the azimuth difference between two separate stations related to the common source.
|
|
|
|
# -------------- using common receiver differential traveltime data --------------
|
|
cr_dif_time:
|
|
use_cr_time: false # 'true' for using common receiver differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section)
|
|
residual_weight: [1, 3, 1, 0.1] # XXX is the common receiver differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{m,i} - t^{syn}_{n,i} + t^{syn}_{m,i})
|
|
azimuthal_weight: [15, 30, 1, 0.1] # XXX is the azimuth difference between two separate sources related to the common receiver.
|
|
|
|
# -------------- global weight of different types of data (to balance the weight of different data) --------------
|
|
global_weight:
|
|
balance_data_weight: true # yes: over the total weight of the each type of the data. no: use original weight (below weight for each type of data needs to be set)
|
|
abs_time_weight: 1 # weight of absolute traveltime data after balance, default: 1.0
|
|
cs_dif_time_local_weight: 1 # weight of common source differential traveltime data after balance, default: 1.0
|
|
cr_dif_time_local_weight: 1 # weight of common receiver differential traveltime data after balance, default: 1.0
|
|
teleseismic_weight: 1 # weight of teleseismic data after balance, default: 1.0 (exclude in this version)
|
|
|
|
# -------------- inversion parameters --------------
|
|
update_slowness : true # update slowness (velocity) or not. default: true
|
|
update_azi_ani : true # update azimuthal anisotropy (xi, eta) or not. default: false
|
|
|
|
# -------------- for teleseismic inversion (under development) --------------
|
|
# depth_taper : [d1,d2] means:
|
|
# if XXX < d1, kernel <- kernel * 0.0
|
|
# if d1 <= XXX < d2, kernel <- kernel * (XXX-d1)/(d2-d1), (linear interpolation)
|
|
# if d2 <= XXX , kernel <- kernel * 1.0
|
|
# You can easily set d1 = -200, d1 = -100 to remove this taper.
|
|
depth_taper : [-200, -100]
|
|
|
|
#################################################
|
|
# relocation parameters setting #
|
|
#################################################
|
|
relocation: # update earthquake hypocenter and origin time (when run_mode : 2 and 3)
|
|
min_Ndata: 4 # if the number of data of the earthquake is less than <min_Ndata>, the earthquake will not be relocated. defaut value: 4
|
|
|
|
# relocation_strategy
|
|
step_length : 0.01 # initial step length of relocation perturbation. 0.01 means maximum 1% perturbation for each iteration.
|
|
step_length_decay : 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9
|
|
rescaling_dep_lat_lon_ortime : [10, 10, 10, 1] # The perturbation is related to <rescaling_dep_lat_lon_ortime>. Unit: km,km,km,second
|
|
max_change_dep_lat_lon_ortime : [5, 5, 5, 0.5] # the change of dep,lat,lon,ortime do not exceed max_change. Unit: km,km,km,second
|
|
max_iterations : 100 # maximum number of iterations for relocation
|
|
tol_gradient : 0.0001 # if the norm of gradient is smaller than the tolerance, the iteration of relocation terminates
|
|
|
|
# -------------- using absolute traveltime data --------------
|
|
abs_time:
|
|
use_abs_time : true # 'yes' for using absolute traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section)
|
|
residual_weight : [1, 3, 1, 0.1] # XXX is the absolute traveltime residual (second) = abs(t^{obs}_{n,i} - t^{syn}_{n,j})
|
|
distance_weight : [50, 150, 1, 0.1] # XXX is epicenter distance (km) between the source and receiver related to the data
|
|
|
|
# -------------- using common source differential traveltime data --------------
|
|
cs_dif_time:
|
|
use_cs_time : false # 'yes' for using common source differential traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section)
|
|
residual_weight : [1, 3, 1, 1] # XXX is the common source differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{n,j} - t^{syn}_{n,i} + t^{syn}_{n,j}).
|
|
azimuthal_weight : [100, 200, 1, 1] # XXX is the azimuth difference between two separate stations related to the common source.
|
|
|
|
# -------------- using common receiver differential traveltime data --------------
|
|
cr_dif_time:
|
|
use_cr_time : true # 'yes' for using common receiver differential traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section)
|
|
residual_weight : [1, 3, 1, 0.1] # XXX is the common receiver differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{m,i} - t^{syn}_{n,i} + t^{syn}_{m,i})
|
|
azimuthal_weight : [10, 30, 1, 0.1] # XXX is the azimuth difference between two separate sources related to the common receiver.
|
|
|
|
|
|
# -------------- global weight of different types of data (to balance the weight of different data) --------------
|
|
global_weight:
|
|
balance_data_weight: false # yes: over the total weight of the each type of the data. no: use original weight (below weight for each type of data needs to be set)
|
|
abs_time_local_weight: 1 # weight of absolute traveltime data for relocation after balance, default: 1.0
|
|
cs_dif_time_local_weight: 1 # weight of common source differential traveltime data for relocation after balance, default: 1.0
|
|
cr_dif_time_local_weight: 1 # weight of common receiver differential traveltime data for relocation after balance, default: 1.0
|
|
|
|
####################################################################
|
|
# inversion strategy for tomography and relocation #
|
|
####################################################################
|
|
inversion_strategy: # update model parameters and earthquake hypocenter iteratively (when run_mode : 3)
|
|
|
|
inv_mode : 0 # 0 for update model parameters and relocation iteratively. 1 for update model parameters and relocation simultaneously.
|
|
|
|
# for inv_mode : 0, parameters below are required
|
|
inv_mode_0: # update model for <model_update_N_iter> steps, then update location for <relocation_N_iter> steps, and repeat the process for <max_loop> loops.
|
|
model_update_N_iter : 1
|
|
relocation_N_iter : 1
|
|
max_loop : 10
|
|
|
|
# for inv_mode : 1, parameters below are required
|
|
inv_mode_1: # update model and location simultaneously for <max_loop> loops.
|
|
max_loop : 10
|
|
|
|
# keep these setting unchanged, unless you are familiar with the eikonal solver in this code
|
|
calculation:
|
|
convergence_tolerance: 0.0001 # threshold value for checking the convergence for each forward/adjoint run
|
|
max_iterations: 500 # number of maximum iteration for each forward/adjoint run
|
|
stencil_order: 1 # order of stencil, 1 or 3
|
|
stencil_type: 1 # 0: , 1: first-order upwind scheme (only sweep_type 0 is supported)
|
|
sweep_type: 1 # 0: legacy, 1: cuthill-mckee with shm parallelization
|
|
|