@@ -93,7 +93,7 @@ struct GRAVFFT_CTRL {
9393 } I ;
9494 struct GRAVFFT_M { /* -M<mgal_at_45> */
9595 bool active ;
96- double mgal_at_45 ;
96+ double mgal_at_45 , normal_gravity ;
9797 } M ;
9898 struct GRAVFFT_N { /* -N[f|q|s<n_columns>/<n_rows>][+e|m|n][+t<width>][+w[<suffix>]][+z[p]] */
9999 bool active ;
@@ -137,7 +137,7 @@ struct GRAVFFT_CTRL {
137137#endif
138138
139139#define YOUNGS_MODULUS 7.0e10 /* Pascal = Nt/m**2 */
140- #define NORMAL_GRAVITY 9.806199203 /* Moritz's 1980 IGF value for gravity at 45 degrees latitude (m/s) */
140+ // #define NORMAL_GRAVITY 9.806199203 /* Moritz's 1980 IGF value for gravity at 45 degrees latitude (m/s) */
141141#define POISSONS_RATIO 0.25
142142
143143static bool sphericity = false;
@@ -322,6 +322,7 @@ static int parse (struct GMT_CTRL *GMT, struct GRAVFFT_CTRL *Ctrl, struct GMT_OP
322322 case 'M' : /* Miligals at 45 degrees */
323323 n_errors += gmt_M_repeated_module_option (API , Ctrl -> M .active );
324324 sscanf (opt -> arg , "%lf" , & Ctrl -> M .mgal_at_45 );
325+ Ctrl -> M .normal_gravity = Ctrl -> M .mgal_at_45 * 1e-5 ;
325326 break ;
326327 case 'N' :
327328 n_errors += gmt_M_repeated_module_option (API , Ctrl -> N .active );
@@ -423,7 +424,10 @@ static int parse (struct GMT_CTRL *GMT, struct GRAVFFT_CTRL *Ctrl, struct GMT_OP
423424 !(Ctrl -> F .mode == GRAVFFT_FAA || Ctrl -> F .mode == GRAVFFT_GEOID ),
424425 "Theoretical admittances are only defined for FAA or GEOID.\n" );
425426
426- if (!Ctrl -> M .active ) Ctrl -> M .mgal_at_45 = 980619.9203 ; /* Moritz's 1980 IGF value for gravity in mGal at 45 degrees latitude */
427+ if (!Ctrl -> M .active ) {
428+ Ctrl -> M .mgal_at_45 = 980619.9203 ; /* Moritz's 1980 IGF value for gravity in mGal at 45 degrees latitude */
429+ Ctrl -> M .normal_gravity = 9.806199203 ;
430+ }
427431
428432 return (n_errors ? GMT_PARSE_ERROR : GMT_NOERROR );
429433}
@@ -875,7 +879,7 @@ GMT_LOCAL void gravfft_do_isostasy (struct GMT_CTRL *GMT, struct GMT_GRID *Grid,
875879 }
876880 GMT_Report (GMT -> parent , GMT_MSG_DEBUG , "Using effective load density rho_l = %g and Airy boost factor A = %g\n" , rho_load , A );
877881 rigidity_d = (YOUNGS_MODULUS * Ctrl -> T .te * Ctrl -> T .te * Ctrl -> T .te ) / (12.0 * (1.0 - POISSONS_RATIO * POISSONS_RATIO ));
878- d_over_restoring_force = rigidity_d / ( (Ctrl -> T .rhom - rho_load ) * NORMAL_GRAVITY );
882+ d_over_restoring_force = rigidity_d / ( (Ctrl -> T .rhom - rho_load ) * Ctrl -> M . normal_gravity );
879883 airy_ratio = - A * (rho_load - Ctrl -> T .rhow )/(Ctrl -> T .rhom - rho_load );
880884
881885 if (Ctrl -> T .te == 0.0 ) { /* Airy isostasy; scale global variable scale_out and return */
@@ -1120,7 +1124,7 @@ GMT_LOCAL void gravfft_load_from_below_admitt(struct GMT_CTRL *GMT, struct GRAVF
11201124
11211125 delta_k /= TWO_PI ; /* Use frequency, not wavenumber */
11221126 D = (YOUNGS_MODULUS * Ctrl -> T .te * Ctrl -> T .te * Ctrl -> T .te ) / (12.0 * (1.0 - POISSONS_RATIO * POISSONS_RATIO ));
1123- alfa = pow (TWO_PI , 4. ) * D / (NORMAL_GRAVITY * Ctrl -> T .rho_mc );
1127+ alfa = pow (TWO_PI , 4. ) * D / (Ctrl -> M . normal_gravity * Ctrl -> T .rho_mc );
11241128
11251129 for (k = 0 ; k < nk ; k ++ ) {
11261130 freq = (k + 1 ) * delta_k ;
@@ -1129,7 +1133,7 @@ GMT_LOCAL void gravfft_load_from_below_admitt(struct GMT_CTRL *GMT, struct GRAVF
11291133 if (Ctrl -> F .mode == GRAVFFT_FAA )
11301134 t1 *= 1.0e5 ; /* to have it in mGals */
11311135 else /* Must be the GEOID case */
1132- t1 /= (NORMAL_GRAVITY * freq * TWO_PI );
1136+ t1 /= (Ctrl -> M . normal_gravity * freq * TWO_PI );
11331137 t2 = Ctrl -> T .rho_cw * exp (- TWO_PI * freq * Ctrl -> misc .z_level ) +
11341138 Ctrl -> T .rho_mc * exp (- TWO_PI * freq * Ctrl -> Z .zm );
11351139 t3 = - (Ctrl -> T .rho_mw + Ctrl -> T .rho_mc * pow (freq ,4. ) * alfa ) * exp (- TWO_PI * freq * Ctrl -> Z .zl );
@@ -1156,7 +1160,7 @@ GMT_LOCAL void gravfft_load_from_top_admitt (struct GMT_CTRL *GMT, struct GRAVFF
11561160
11571161 delta_k /= TWO_PI ; /* Use frequency, not wavenumber */
11581162 D = (YOUNGS_MODULUS * Ctrl -> T .te * Ctrl -> T .te * Ctrl -> T .te ) / (12.0 * (1.0 - POISSONS_RATIO * POISSONS_RATIO ));
1159- alfa = pow (TWO_PI ,4. ) * D / (NORMAL_GRAVITY * Ctrl -> T .rho_mc );
1163+ alfa = pow (TWO_PI ,4. ) * D / (Ctrl -> M . normal_gravity * Ctrl -> T .rho_mc );
11601164
11611165 for (k = 0 ; k < nk ; k ++ ) {
11621166 freq = (k + 1 ) * delta_k ;
@@ -1165,7 +1169,7 @@ GMT_LOCAL void gravfft_load_from_top_admitt (struct GMT_CTRL *GMT, struct GRAVFF
11651169 if (Ctrl -> F .mode == GRAVFFT_FAA )
11661170 t1 *= 1.0e5 ; /* to have it in mGals */
11671171 else /* Must be the GEOID case */
1168- t1 /= (NORMAL_GRAVITY * freq * TWO_PI );
1172+ t1 /= (Ctrl -> M . normal_gravity * freq * TWO_PI );
11691173 t2 = exp (- TWO_PI * freq * Ctrl -> misc .z_level ) - exp (- TWO_PI * freq * Ctrl -> Z .zm ) / (1 + alfa * pow (freq ,4. ));
11701174 z_from_top [k ] = t1 * Ctrl -> T .rho_cw * t2 ;
11711175 }
@@ -1188,7 +1192,7 @@ GMT_LOCAL void gravfft_load_from_top_grid (struct GMT_CTRL *GMT, struct GMT_GRID
11881192 p = n - 1.0 ;
11891193
11901194 D = (YOUNGS_MODULUS * Ctrl -> T .te * Ctrl -> T .te * Ctrl -> T .te ) / (12.0 * (1.0 - POISSONS_RATIO * POISSONS_RATIO ));
1191- alfa = pow (TWO_PI ,4. ) * D / (NORMAL_GRAVITY * Ctrl -> T .rho_mc );
1195+ alfa = pow (TWO_PI ,4. ) * D / (Ctrl -> M . normal_gravity * Ctrl -> T .rho_mc );
11921196 raised [0 ] = 0.0f ; raised [1 ] = 0.0f ;
11931197
11941198 for (k = 0 ; k < Grid -> header -> size ; k += 2 ) {
@@ -1213,7 +1217,7 @@ GMT_LOCAL void gravfft_load_from_top_grid (struct GMT_CTRL *GMT, struct GMT_GRID
12131217 datac [k + 1 ] += (gmt_grdfloat ) ((Ctrl -> T .rho_cw * t1 * t2 ) * t / f * raised [k + 1 ]);
12141218 break ;
12151219 case GRAVFFT_GEOID :
1216- if (mk > 0.0 ) t1 /= (NORMAL_GRAVITY * mk * TWO_PI );
1220+ if (mk > 0.0 ) t1 /= (Ctrl -> M . normal_gravity * mk * TWO_PI );
12171221 datac [k ] += (gmt_grdfloat ) ((Ctrl -> T .rho_cw * t1 * t2 ) * t / f * raised [k ]);
12181222 datac [k + 1 ] += (gmt_grdfloat ) ((Ctrl -> T .rho_cw * t1 * t2 ) * t / f * raised [k + 1 ]);
12191223 break ;
@@ -1259,7 +1263,7 @@ GMT_LOCAL void gravfft_load_from_below_grid (struct GMT_CTRL *GMT, struct GMT_GR
12591263 p = n - 1.0 ;
12601264
12611265 D = (YOUNGS_MODULUS * Ctrl -> T .te * Ctrl -> T .te * Ctrl -> T .te ) / (12.0 * (1.0 - POISSONS_RATIO * POISSONS_RATIO ));
1262- alfa = pow (TWO_PI ,4. ) * D / (NORMAL_GRAVITY * Ctrl -> T .rho_mc );
1266+ alfa = pow (TWO_PI ,4. ) * D / (Ctrl -> M . normal_gravity * Ctrl -> T .rho_mc );
12631267 raised [0 ] = 0.0f ; raised [1 ] = 0.0f ;
12641268
12651269 for (k = 0 ; k < Grid -> header -> size ; k += 2 ) {
@@ -1275,7 +1279,7 @@ GMT_LOCAL void gravfft_load_from_below_grid (struct GMT_CTRL *GMT, struct GMT_GR
12751279 if (Ctrl -> F .mode == GRAVFFT_FAA )
12761280 t1 *= 1.0e5 ; /* to have it in mGals */
12771281 else /* Must be the GEOID case */
1278- t1 /= (NORMAL_GRAVITY * mk * TWO_PI );
1282+ t1 /= (Ctrl -> M . normal_gravity * mk * TWO_PI );
12791283 t2 = Ctrl -> T .rho_cw * exp (- TWO_PI * mk * Ctrl -> misc .z_level ) +
12801284 Ctrl -> T .rho_mc * exp (- TWO_PI * mk * Ctrl -> Z .zm );
12811285 t3 = - (Ctrl -> T .rho_mw + Ctrl -> T .rho_mc * pow (mk ,4. ) * alfa ) * exp (- TWO_PI * mk * Ctrl -> Z .zl );
0 commit comments