diff --git a/pygrt/C_extension/src/dynamic/grt_greenfn.c b/pygrt/C_extension/src/dynamic/grt_greenfn.c index 02ee92c..9ebbe34 100644 --- a/pygrt/C_extension/src/dynamic/grt_greenfn.c +++ b/pygrt/C_extension/src/dynamic/grt_greenfn.c @@ -283,7 +283,7 @@ printf("\n" "Usage:\n" "----------------------------------------------------------------\n" " grt greenfn -M -D/ \n" -" -N/
[/][+n] \n" +" -N/
[+w][+n] \n" " -R,[,...] -O [-H/] \n" " [-L] [-V] [-E[/]] \n" " [-K[//]] [-P]\n" @@ -305,7 +305,7 @@ printf("\n" " : source depth (km).\n" " : receiver depth (km).\n" "\n" -" -N/
[/][+n] \n" +" -N/
[+w][+n] \n" " : number of points. (NOT requires 2^n).\n" "
: time interval (secs). \n" " : define the coefficient of imaginary \n" @@ -477,22 +477,22 @@ static void getopt_from_command(GRT_MODULE_CTRL *Ctrl, int argc, char **argv){ } break; - // 点数,采样间隔,虚频率 -Nnt/dt/[zeta][+n] + // 点数,采样间隔,虚频率 -Nnt/dt[+w][+n] case 'N': Ctrl->N.active = true; { char *string = strdup(optarg); char *token = strtok(string, "+"); - if(2 > sscanf(token, "%d/%lf/%lf", &Ctrl->N.nt, &Ctrl->N.dt, &Ctrl->N.zeta)){ + if(2 != sscanf(token, "%d/%lf", &Ctrl->N.nt, &Ctrl->N.dt)){ GRTBadOptionError(command, N, ""); }; - if(Ctrl->N.nt <= 0 || Ctrl->N.dt <= 0.0 || Ctrl->N.zeta <= 0.0){ + if(Ctrl->N.nt <= 0 || Ctrl->N.dt <= 0.0){ GRTBadOptionError(command, N, "Nonpositive value in -N is not supported."); } // 处理 + 号指令 token = strtok(NULL, "+"); - if(token != NULL){ + while(token != NULL){ switch (token[0]){ case 'n': if(1 != sscanf(token+1, "%d", &Ctrl->N.upsample_n)){ @@ -502,10 +502,22 @@ static void getopt_from_command(GRT_MODULE_CTRL *Ctrl, int argc, char **argv){ GRTBadOptionError(command, N, "+%s need positive integer, but get (%d).", token, Ctrl->N.upsample_n); } break; + + case 'w': + if(1 != sscanf(token+1, "%lf", &Ctrl->N.zeta)){ + GRTBadOptionError(command, N, ""); + } + if(Ctrl->N.zeta <= 0.0){ + GRTBadOptionError(command, N, "+%s need positive float, but get (%lf).", token, Ctrl->N.zeta); + } + break; + default: GRTBadOptionError(command, N, "+%s is not supported.", token); break; } + + token = strtok(NULL, "+"); } GRT_SAFE_FREE_PTR(string);