| 374 | } |
| 375 | |
| 376 | static bool is_metal(meep::field_type ft, const material_type *material) { |
| 377 | if (ft == meep::E_stuff) switch (material->which_subclass) { |
| 378 | case MTS::MEDIUM: |
| 379 | return (material->subclass.medium_data->epsilon_diag.x < 0 || |
| 380 | material->subclass.medium_data->epsilon_diag.y < 0 || |
| 381 | material->subclass.medium_data->epsilon_diag.z < 0); |
| 382 | case MTS::PERFECT_METAL: return true; |
| 383 | default: meep::abort("unknown material type"); return false; |
| 384 | } |
| 385 | else |
| 386 | switch (material->which_subclass) { |
| 387 | case MTS::MEDIUM: |
| 388 | return (material->subclass.medium_data->mu_diag.x < 0 || |
| 389 | material->subclass.medium_data->mu_diag.y < 0 || |
| 390 | material->subclass.medium_data->mu_diag.z < 0); |
| 391 | case MTS::PERFECT_METAL: |
| 392 | return false; // is an electric conductor, but not a magnetic conductor |
| 393 | default: meep::abort("unknown material type"); return false; |
| 394 | } |
| 395 | } |
| 396 | |
| 397 | static void material_epsmu(meep::field_type ft, material_type material, symmetric_matrix *epsmu, |
| 398 | symmetric_matrix *epsmu_inv) { |
no test coverage detected