Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions pygrt/C_extension/include/grt/common/model.h
Original file line number Diff line number Diff line change
Expand Up @@ -163,11 +163,12 @@ MODEL1D_STATE * grt_copy_mod1d_state(const MODEL1D_STATE *mstat1);
/**
* 根据给定频率,设置衰减后的弹性参数;若omega实部小于0则视为弹性介质
*
* @param[in,out] mstat `MODEL1D_STATE` 结构体指针
* @param[in] omega 圆频率
* @param[in,out] mstat `MODEL1D_STATE` 结构体指针
* @param[in] omega 圆频率
* @param[in] isElastic 是否为忽略层内的Q值
*
*/
void grt_update_mod1d_state_omega(MODEL1D_STATE *mstat, const cplx_t omega);
void grt_update_mod1d_state_omega(MODEL1D_STATE *mstat, const cplx_t omega, const bool isElastic);

/**
* 根据记录好的圆频率,给定波数,计算相速度和每层的 xa, xb, caca, cbcb
Expand Down
12 changes: 7 additions & 5 deletions pygrt/C_extension/src/common/model.c
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ MODEL1D_STATE * grt_copy_mod1d_state(const MODEL1D_STATE *mstat1)
}


void grt_update_mod1d_state_omega(MODEL1D_STATE *mstat, const cplx_t omega)
void grt_update_mod1d_state_omega(MODEL1D_STATE *mstat, const cplx_t omega, const bool isElastic)
{
mstat->omega = omega;

Expand All @@ -372,10 +372,12 @@ void grt_update_mod1d_state_omega(MODEL1D_STATE *mstat, const cplx_t omega)
Va0 = mod1d->Va[i];
Vb0 = mod1d->Vb[i];

// 圆频率实部为负数表明不考虑模型的 Q 值属性
// 在读入模型后需要需要运行一次本函数以填充弹性模量,见 grt_read_mod1d_from_file 函数
atna = (creal(omega) >= 0.0 && mod1d->Qainv[i] > 0.0)? grt_attenuation_law(mod1d->Qainv[i], mod1d->omgref, omega) : 1.0;
atnb = (creal(omega) >= 0.0 && mod1d->Qbinv[i] > 0.0)? grt_attenuation_law(mod1d->Qbinv[i], mod1d->omgref, omega) : 1.0;
if(isElastic) {
atna = atnb = 1.0;
} else {
atna = (mod1d->Qainv[i] > 0.0)? grt_attenuation_law(mod1d->Qainv[i], mod1d->omgref, omega) : 1.0;
atnb = (mod1d->Qbinv[i] > 0.0)? grt_attenuation_law(mod1d->Qbinv[i], mod1d->omgref, omega) : 1.0;
}

mstat->atna[i] = atna;
mstat->atnb[i] = atnb;
Expand Down
2 changes: 1 addition & 1 deletion pygrt/C_extension/src/dynamic/grn.c
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ void grt_integ_grn_spec(
MODEL1D_STATE *local_mstat = grt_init_mod1d_state(mod1d);

// 将 omega 计入模型结构体
grt_update_mod1d_state_omega(local_mstat, omega);
grt_update_mod1d_state_omega(local_mstat, omega, false);

// 是否要输出积分过程文件
bool needfstats = (statsstr!=NULL && (grt_findElement_size_t(statsidxs, nstatsidxs, iw) >= 0));
Expand Down
2 changes: 1 addition & 1 deletion pygrt/C_extension/src/dynamic/grt_kernel.c
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,7 @@ int kernel_main(int argc, char **argv)
// 将 omega 计入模型结构体
local_mstat->omega = omega;

grt_update_mod1d_state_omega(local_mstat, omega);
grt_update_mod1d_state_omega(local_mstat, omega, false);

// 为当前频率创建波数积分记录文件
FILE *fstats = NULL;
Expand Down
2 changes: 1 addition & 1 deletion pygrt/C_extension/src/static/static_grn.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ void grt_integ_static_grn(
Kmet->kmax = Kmet->k0;
// 模型状态
MODEL1D_STATE *mstat = grt_init_mod1d_state(mod1d);
grt_update_mod1d_state_omega(mstat, -1.0);
grt_update_mod1d_state_omega(mstat, 1.0, true);
K_INTEG *Kint = grt_wavenumber_integral(mstat, uniq_nr, uniq_rs, Kmet, calc_upar, grt_static_kernel);

cplx_t src_mu = mstat->mu[mod1d->isrc];
Expand Down
Loading