void multiply(const darray_t *array, double factor);
unsigned char *gen_neighbor(int w, int h, int k, const darray_t *flow, const darray_t *flow_i);
void weighten(const darray_t *luminance, unsigned char *neighbors);
-int solve_mg(int nlevel, int iters, int ncycle, darray_t **values, darray_t **marks, const darray_t *init, unsigned char **nb_list, darray_t **flows, int scalexyz);
+int solve_mg(int nlevel, int iters, int ncycle, darray_t **values, darray_t **marks, const darray_t *init, unsigned char **nb_list, darray_t **flows, int scalexyz, double target_residual_change);
#endif