Control: tags -1 upstream
(probably - I haven't actually tried)

The missing centre points (0 instead of max at distance=0) are probably due to rounding error in the great circle distance (src/hyantes_run.c:80): equal coordinates should give tmp=acos(1)=0, but rounding error might make it acos(just over 1)=NaN, causing this point to be skipped by if(tmp<range). The other points are then scaled up in the normalization step.

However, the "obvious" fix

--- a/src/hyantes_run.c
+++ b/src/hyantes_run.c
@@ -76,8 +76,10 @@ static void DO_RUN (data_t lonMin, data_t latMin, data_t lonStep, data_t latStep

             for(size_t i=imin;i<imax;i++) {
                 for(size_t j=jmin;j<jmax;j++) {
+                    data_t tmp0 =
+ COS(latMin+latStep*i)*COS( t[k].lat ) * ( COS(lonMin+lonStep*j)*COS(t[k].lon)+SIN(lonMin+lonStep*j)*SIN(t[k].lon)) + SIN(latMin+latStep*i)*SIN(t[k].lat);
                     data_t tmp =
- 6368.* ACOS(COS(latMin+latStep*i)*COS( t[k].lat ) * ( COS(lonMin+lonStep*j)*COS(t[k].lon)+SIN(lonMin+lonStep*j)*SIN(t[k].lon)) + SIN(latMin+latStep*i)*SIN(t[k].lat)); + (tmp0 >= 1.) ? 0. : (6368.* ACOS(tmp0)); /* if distance from town is within range, set contribution */
                                        if( tmp < range ) {
/* The next line will be replace by cpp to match the wanted smoothing function*/

seems to break ra_pareto, for unknown reasons. (It also still doesn't pass family, but that appears to be a bug in the test suite: there are some missing centre points *in the family.out reference*, which are probably also why this bug isn't visible on amd64.)

Reply via email to