| 169 | } |
| 170 | |
| 171 | void check_integral(fields &f, linear_integrand_data &d, const volume &v, component cgrid) { |
| 172 | double x1 = v.in_direction_min(d.dx); |
| 173 | double x2 = v.in_direction_max(d.dx); |
| 174 | double y1 = v.in_direction_min(d.dy); |
| 175 | double y2 = v.in_direction_max(d.dy); |
| 176 | double z1 = v.in_direction_min(d.dz); |
| 177 | double z2 = v.in_direction_max(d.dz); |
| 178 | |
| 179 | master_printf("Check %d-dim. %s integral in %s cell with %s integrand...", |
| 180 | (x2 - x1 > 0) + (y2 - y1 > 0) + (z2 - z1 > 0), component_name(cgrid), |
| 181 | v.dim == D3 ? "3d" : (v.dim == D2 ? "2d" : (v.dim == Dcyl ? "cylindrical" : "1d")), |
| 182 | (d.c == 1.0 && !d.axy && !d.ax && !d.ay && !d.az && !d.axy && !d.ayz && !d.axz) |
| 183 | ? "unit" |
| 184 | : "linear"); |
| 185 | if (0) |
| 186 | master_printf("\n... grid_volume (%g,%g,%g) at (%g,%g,%g) with integral (%g, %g,%g,%g, " |
| 187 | "%g,%g,%g, %g)...\n", |
| 188 | x2 - x1, y2 - y1, z2 - z1, (x1 + x2) / 2, (y1 + y2) / 2, (z1 + z2) / 2, d.c, d.ax, |
| 189 | d.ay, d.az, d.axy, d.ayz, d.axz, d.axyz); |
| 190 | |
| 191 | double sum = real(f.integrate(0, 0, linear_integrand, (void *)&d, v)); |
| 192 | if (fabs(sum - correct_integral(v, d)) > 1e-9 * fabs(sum)) |
| 193 | meep::abort("FAILED: %0.16g instead of %0.16g\n", sum, correct_integral(v, d)); |
| 194 | master_printf("...PASSED.\n"); |
| 195 | } |
| 196 | |
| 197 | void check_splitsym(const grid_volume &gv, int splitting, const symmetry &S, const char *Sname) { |
| 198 | const int num_random_trials = 100; |
no test coverage detected