| 2563 | return _has_mu(self.default_material) |
| 2564 | |
| 2565 | def get_estimated_memory_usage(self): |
| 2566 | if self.fields is None: |
| 2567 | self.collect_stats = True |
| 2568 | self.init_sim() |
| 2569 | |
| 2570 | if self.fragment_stats is None: |
| 2571 | self.fragment_stats = self._compute_fragment_stats( |
| 2572 | self.structure.user_volume |
| 2573 | ) |
| 2574 | |
| 2575 | is_complex = ( |
| 2576 | self.k_point and self.k_point != mp.Vector3(0, 0, 0) |
| 2577 | ) or self.force_complex_fields |
| 2578 | realnums_per_grid_point = 1 if self.dimensions == 1 else 3 |
| 2579 | E_realnums = ( |
| 2580 | self.fragment_stats.num_pixels_in_box |
| 2581 | * (2 if is_complex else 1) |
| 2582 | * realnums_per_grid_point |
| 2583 | ) |
| 2584 | H_realnums = ( |
| 2585 | self.fragment_stats.num_pixels_in_box |
| 2586 | * (2 if is_complex else 1) |
| 2587 | * realnums_per_grid_point |
| 2588 | ) |
| 2589 | D_realnums = ( |
| 2590 | self.fragment_stats.num_pixels_in_box |
| 2591 | * (2 if is_complex else 1) |
| 2592 | * realnums_per_grid_point |
| 2593 | ) |
| 2594 | chi1inv_realnums = self.fragment_stats.num_pixels_in_box * 9 |
| 2595 | |
| 2596 | Mu_realnums = 0 |
| 2597 | if self.has_mu(): |
| 2598 | Mu_realnums = chi1inv_realnums + H_realnums |
| 2599 | |
| 2600 | dft_realnums = self.fragment_stats.num_dft_pixels * 2 |
| 2601 | dispersive_realnums = ( |
| 2602 | self.fragment_stats.num_susceptibility_pixels * 6 * (2 if is_complex else 1) |
| 2603 | ) |
| 2604 | |
| 2605 | total_realnums = ( |
| 2606 | E_realnums |
| 2607 | + H_realnums |
| 2608 | + D_realnums |
| 2609 | + Mu_realnums |
| 2610 | + dft_realnums |
| 2611 | + dispersive_realnums |
| 2612 | ) |
| 2613 | |
| 2614 | total_bytes = total_realnums * mp.get_realnum_size() |
| 2615 | |
| 2616 | return total_bytes |
| 2617 | |
| 2618 | def meep_time(self): |
| 2619 | """ |