diff --git a/examples/plot_sorted.py b/examples/plot_sorted.py index 2caf184b597627575784e4bbfdf9a9101a9681a9..2ba84411af2bb0ff06c7d7030fda0165bc69b5aa 100644 --- a/examples/plot_sorted.py +++ b/examples/plot_sorted.py @@ -36,7 +36,7 @@ import os from scipy import stats from scipy import optimize -dist_cutoff_ratio=1.5 +dist_cutoff_ratio=1.2 ortho_max_fit = 0.2 ortho_min_fit = 0. ortho_max = 2.5 @@ -79,14 +79,14 @@ limit_exact = ( dist_cutoff_ratio - 1. ) print limit_exact #names = ["side", "edge", "corner"] -for orientation in range( 26 ): -# for jjj in range(0,3): -# if jjj == 0: -# orientation = 0 -# if jjj == 1: -# orientation = 1 -# if jjj == 2: -# orientation = 4 +#for orientation in range( 26 ): +for jjj in range(0,3): + if jjj == 0: + orientation = 0 + if jjj == 1: + orientation = 1 + if jjj == 2: + orientation = 4 # Read Quickshed accelerations data=loadtxt( "interaction_dump_%d.dat"%orientation ) @@ -168,8 +168,8 @@ for orientation in range( 26 ): delta = sim / exact # parabola_param1,pcov = optimize.curve_fit(parabola, xx, delta, p0=[1,1,1], sigma=None, maxfev=100000, xtol=1e-13, ftol=1e-13) # #print parabola_param1 - # cubic_param1,pcov = optimize.curve_fit(cubic, xx, delta, p0=[1,1,1,1], sigma=None, maxfev=100000, xtol=1e-13, ftol=1e-13) - # print cubic_param1 + cubic_param1,pcov = optimize.curve_fit(cubic, xx, delta, p0=[1,1,1,1], sigma=None, maxfev=100000, xtol=1e-13, ftol=1e-13) + print cubic_param1 # quartic_param1,pcov = optimize.curve_fit(quartic, xx, delta, p0=[1,1,1,1,1], sigma=None, maxfev=100000, xtol=1e-13, ftol=1e-13) # #print quartic_param1 # quintic_param1,pcov = optimize.curve_fit(quintic, xx, delta, p0=[1,1,1,1,1,1], sigma=None, maxfev=100000, xtol=1e-13, ftol=1e-13) @@ -200,8 +200,8 @@ for orientation in range( 26 ): delta = sim / exact # parabola_param2,pcov = optimize.curve_fit(parabola, xx, delta, p0=[1,1,1], sigma=None, maxfev=100000, xtol=1e-13, ftol=1e-13) # #print parabola_param2 - # cubic_param2,pcov = optimize.curve_fit(cubic, xx, delta, p0=[1,1,1,1], sigma=None, maxfev=100000, xtol=1e-13, ftol=1e-13) - # print cubic_param2 + cubic_param2,pcov = optimize.curve_fit(cubic, xx, delta, p0=[1,1,1,1], sigma=None, maxfev=100000, xtol=1e-13, ftol=1e-13) + print cubic_param2 # quartic_param2,pcov = optimize.curve_fit(quartic, xx, delta, p0=[1,1,1,1,1], sigma=None, maxfev=100000, xtol=1e-13, ftol=1e-13) # #print quartic_param2 # quintic_param2,pcov = optimize.curve_fit(quintic, xx, delta, p0=[1,1,1,1,1,1], sigma=None, maxfev=100000, xtol=1e-13, ftol=1e-13) diff --git a/examples/test_bh_sorted.c b/examples/test_bh_sorted.c index 2345aa11f22bfea1a807f62f02777aeac67bc6de..ab5319a00a2d4f994759cd88b96a981b639b88fb 100644 --- a/examples/test_bh_sorted.c +++ b/examples/test_bh_sorted.c @@ -42,7 +42,7 @@ #define task_limit 1e8 #define const_G 1 // 6.6738e-8 #define dist_min 0.5 /* Used for legacy walk only */ -#define dist_cutoff_ratio 1.5 +#define dist_cutoff_ratio 1.2 #define iact_pair_direct iact_pair_direct_sorted_multipole #define ICHECK -1 #define NO_SANITY_CHECKS @@ -1170,11 +1170,17 @@ float correction_coefs[6*4] = -0.04397042, 0.10367151, -0.06130978, 1.00754152, 0.00536257, -0.06370355, 0.19954405, 0.81828777, -0.00677179, -0.01237365, 0.02703505, 0.99483005, - 0.01082535, -0.0262587, 0.00342499, 1.0151183, - -0.00352327, 0.02770999, -0.02312047, 1.00282468 + 0.00701166, -0.0113404, -0.0159732, 1.02330933, + 0.00297062, 0.01928414, -0.01929454, 1.00190972 }; +static inline float cubic(float x, float a, float b, float c, float d) +{ + return a*x*x*x + b*x*x + c*x + d; +} + + /** * @brief Compute the best-fitting bias correction factor for the acceleration of a particle * @@ -1187,7 +1193,6 @@ static inline void gravity_bias_correction( float d, float axis[3], float corr[3 int k, orientation; int is_zero[3]; - float limit_exact = ( dist_cutoff_ratio - 1. ); /* Start with no applied correction */ corr[0] = corr[1] = corr[2] = 1.f; @@ -1200,6 +1205,10 @@ static inline void gravity_bias_correction( float d, float axis[3], float corr[3 } //message("%f %f", d, limit_exact); +#if 1 + + float limit_exact = ( dist_cutoff_ratio - 1. ); + /* Apply the correction corresponding to this axis */ switch(orientation) @@ -1207,10 +1216,17 @@ static inline void gravity_bias_correction( float d, float axis[3], float corr[3 case 1: /* side */ { - if (d > limit_exact || d < -limit_exact) + if ( d > limit_exact) for( k = 0; k < 3; k++ ) - corr[k] = 0.; + corr[k] = 1./cubic( d, correction_coefs[4*4+0], correction_coefs[4*4+1], correction_coefs[4*4+2], correction_coefs[4*4+3]); + else if ( d < -limit_exact) + for( k = 0; k < 3; k++ ) + corr[k] = 1./cubic( d, correction_coefs[5*4+0], correction_coefs[5*4+1], correction_coefs[5*4+2], correction_coefs[5*4+3]); + + message("corr= %f %f %f", corr[0], corr[1], corr[2]); + + } break; @@ -1243,7 +1259,7 @@ static inline void gravity_bias_correction( float d, float axis[3], float corr[3 for ( k = 0; k < 3; ++k ) corr[k] = (is_zero[k] ? corr[k] : 1 ); - +#endif }