prevent underflow for diffuse scattering Pippard - very short mean free path
This commit is contained in:
@ -486,6 +486,9 @@ Double_t PPippard::Calc_v(const Double_t s) const
|
|||||||
if (ss < 0.001) {
|
if (ss < 0.001) {
|
||||||
v = (-0.0772157-log(ss))*ss+s2; // series expansion in s up to 2nd order
|
v = (-0.0772157-log(ss))*ss+s2; // series expansion in s up to 2nd order
|
||||||
} else {
|
} else {
|
||||||
|
if (ss > 50.0)
|
||||||
|
v = 1/6.0*(exp(-ss)*(s2-ss-4.0) + 4.0);
|
||||||
|
else
|
||||||
v = 1/6.0*(exp(-ss)*(s2-ss-4.0) + 4.0 - ss*(s2-6.0) * gsl_sf_gamma_inc(0.0, ss));
|
v = 1/6.0*(exp(-ss)*(s2-ss-4.0) + 4.0 - ss*(s2-6.0) * gsl_sf_gamma_inc(0.0, ss));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -511,6 +514,9 @@ Double_t PPippard::Calc_w(const Double_t s) const
|
|||||||
if (ss < 0.001) {
|
if (ss < 0.001) {
|
||||||
w = (0.211392 - 0.5*log(ss))*s2; // series expansion in s up to 2nd order
|
w = (0.211392 - 0.5*log(ss))*s2; // series expansion in s up to 2nd order
|
||||||
} else {
|
} else {
|
||||||
|
if (ss > 50.0)
|
||||||
|
w = 1/24.0*(exp(-ss)*(6.0-10.0*ss-s2+ss*s2)+16.0*ss-6.0);
|
||||||
|
else
|
||||||
w = 1/24.0*(exp(-ss)*(6.0-10.0*ss-s2+ss*s2)+16.0*ss-6.0-s2*(s2-12.0)*gsl_sf_gamma_inc(0.0, ss));
|
w = 1/24.0*(exp(-ss)*(6.0-10.0*ss-s2+ss*s2)+16.0*ss-6.0-s2*(s2-12.0)*gsl_sf_gamma_inc(0.0, ss));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user