| 79 | } |
| 80 | |
| 81 | static double correct_integral(const volume &v, const linear_integrand_data &data) { |
| 82 | direction x = data.dx, y = data.dy, z = data.dz; |
| 83 | double x1 = v.in_direction_min(x); |
| 84 | double x2 = v.in_direction_max(x); |
| 85 | double y1 = v.in_direction_min(y); |
| 86 | double y2 = v.in_direction_max(y); |
| 87 | double z1 = v.in_direction_min(z); |
| 88 | double z2 = v.in_direction_max(z); |
| 89 | |
| 90 | return (data.c * integral1(x1, x2, x) * integral1(y1, y2, y) * integral1(z1, z2, z) + |
| 91 | data.ax * integralx(x1, x2, x) * integral1(y1, y2, y) * integral1(z1, z2, z) + |
| 92 | data.ay * integral1(x1, x2, x) * integralx(y1, y2, y) * integral1(z1, z2, z) + |
| 93 | data.az * integral1(x1, x2, x) * integral1(y1, y2, y) * integralx(z1, z2, z) + |
| 94 | data.axy * integralx(x1, x2, x) * integralx(y1, y2, y) * integral1(z1, z2, z) + |
| 95 | data.ayz * integral1(x1, x2, x) * integralx(y1, y2, y) * integralx(z1, z2, z) + |
| 96 | data.axz * integralx(x1, x2, x) * integral1(y1, y2, y) * integralx(z1, z2, z) + |
| 97 | data.axyz * integralx(x1, x2, x) * integralx(y1, y2, y) * integralx(z1, z2, z)); |
| 98 | } |
| 99 | |
| 100 | // uniform pseudo-random number in [min,max] |
| 101 | static double urand(double min, double max) { return (rand() * ((max - min) / RAND_MAX) + min); } |
no test coverage detected