(
sim: Simulation,
ax: Axes,
output_plane: Optional[Volume] = None,
boundary_parameters: Optional[dict] = None,
)
| 721 | |
| 722 | |
| 723 | def plot_boundaries( |
| 724 | sim: Simulation, |
| 725 | ax: Axes, |
| 726 | output_plane: Optional[Volume] = None, |
| 727 | boundary_parameters: Optional[dict] = None, |
| 728 | ) -> Axes: |
| 729 | # consolidate plotting parameters |
| 730 | if boundary_parameters is None: |
| 731 | boundary_parameters = default_boundary_parameters |
| 732 | else: |
| 733 | boundary_parameters = dict(default_boundary_parameters, **boundary_parameters) |
| 734 | |
| 735 | import itertools |
| 736 | |
| 737 | for boundary in sim.boundary_layers: |
| 738 | # boundary on all four sides |
| 739 | if boundary.direction == mp.ALL and boundary.side == mp.ALL: |
| 740 | if sim.dimensions == 1: |
| 741 | dims = [mp.X] |
| 742 | elif sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical: |
| 743 | dims = [mp.X, mp.Z] |
| 744 | elif sim.dimensions == 2: |
| 745 | dims = [mp.X, mp.Y] |
| 746 | elif sim.dimensions == 3: |
| 747 | dims = [mp.X, mp.Y, mp.Z] |
| 748 | else: |
| 749 | raise ValueError("Invalid simulation dimensions") |
| 750 | for permutation in itertools.product(dims, [mp.Low, mp.High]): |
| 751 | if ((permutation[0] == mp.X) and (permutation[1] == mp.Low)) and ( |
| 752 | sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical |
| 753 | ): |
| 754 | continue |
| 755 | vol = get_boundary_volumes(sim, boundary.thickness, *permutation) |
| 756 | ax = plot_volume( |
| 757 | sim, ax, vol, output_plane, plotting_parameters=boundary_parameters |
| 758 | ) |
| 759 | # boundary on only two of four sides |
| 760 | elif boundary.side == mp.ALL: |
| 761 | for side in [mp.Low, mp.High]: |
| 762 | if ((boundary.direction == mp.X) and (side == mp.Low)) and ( |
| 763 | sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical |
| 764 | ): |
| 765 | continue |
| 766 | vol = get_boundary_volumes( |
| 767 | sim, boundary.thickness, boundary.direction, side |
| 768 | ) |
| 769 | ax = plot_volume( |
| 770 | sim, ax, vol, output_plane, plotting_parameters=boundary_parameters |
| 771 | ) |
| 772 | # boundary on just one side |
| 773 | else: |
| 774 | if ((boundary.direction == mp.X) and (boundary.side == mp.Low)) and ( |
| 775 | sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical |
| 776 | ): |
| 777 | continue |
| 778 | vol = get_boundary_volumes( |
| 779 | sim, boundary.thickness, boundary.direction, boundary.side |
| 780 | ) |
no test coverage detected