From 76c4210bb4a126964737c5214db875645117237f Mon Sep 17 00:00:00 2001 From: mawc2019 Date: Wed, 7 Dec 2022 17:45:36 -0500 Subject: [PATCH 1/3] make the mode argument in the EigenmodeCoefficient adjont solver accept a DiffractedPlanewave object --- python/adjoint/objective.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/python/adjoint/objective.py b/python/adjoint/objective.py index bfee38983..e07117184 100644 --- a/python/adjoint/objective.py +++ b/python/adjoint/objective.py @@ -150,7 +150,7 @@ class EigenmodeCoefficient(ObjectiveQuantity): """A frequency-dependent eigenmode coefficient. Attributes: volume: the volume over which the eigenmode coefficient is calculated. - mode: the eigenmode number. + mode: the eigenmode number or the DiffractedPlanewave object. forward: whether the forward or backward mode coefficient is returned as the result of the evaluation. kpoint_func: an optional k-point function to use when evaluating the eigenmode @@ -269,13 +269,23 @@ def __call__(self): ) kpoint_func = lambda *not_used: kpoint if self.forward else -1 * kpoint overlap_idx = 0 + + + if isinstance(self.mode,int): + _mode = [self.mode] + elif isinstance(self.mode,mp.DiffractedPlanewave): + _mode = self.mode + else: + raise TypeError("mode in EigenmodeCoefficient must be an integer or a DiffractedPlanewave object") + ob = self.sim.get_eigenmode_coefficients( self._monitor, - [self.mode], + _mode, direction=mp.NO_DIRECTION, kpoint_func=kpoint_func, **self.eigenmode_kwargs, ) + overlaps = ob.alpha.squeeze(axis=0) assert overlaps.ndim == 2 self._eval = overlaps[:, overlap_idx] From a1ab54447d50d25ec59a885ba478a5fbe73a7c7c Mon Sep 17 00:00:00 2001 From: mawc2019 Date: Wed, 7 Dec 2022 17:47:23 -0500 Subject: [PATCH 2/3] delecte a blank line --- python/adjoint/objective.py | 1 - 1 file changed, 1 deletion(-) diff --git a/python/adjoint/objective.py b/python/adjoint/objective.py index e07117184..d4e100f73 100644 --- a/python/adjoint/objective.py +++ b/python/adjoint/objective.py @@ -270,7 +270,6 @@ def __call__(self): kpoint_func = lambda *not_used: kpoint if self.forward else -1 * kpoint overlap_idx = 0 - if isinstance(self.mode,int): _mode = [self.mode] elif isinstance(self.mode,mp.DiffractedPlanewave): From e84a2ba5297dda772d9ce6f582a10d87489fc47c Mon Sep 17 00:00:00 2001 From: mawc2019 Date: Wed, 7 Dec 2022 17:56:26 -0500 Subject: [PATCH 3/3] add some spaces and lines to make the code clearer --- python/adjoint/objective.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/python/adjoint/objective.py b/python/adjoint/objective.py index d4e100f73..05e0c4d85 100644 --- a/python/adjoint/objective.py +++ b/python/adjoint/objective.py @@ -270,12 +270,14 @@ def __call__(self): kpoint_func = lambda *not_used: kpoint if self.forward else -1 * kpoint overlap_idx = 0 - if isinstance(self.mode,int): + if isinstance(self.mode, int): _mode = [self.mode] - elif isinstance(self.mode,mp.DiffractedPlanewave): + elif isinstance(self.mode, mp.DiffractedPlanewave): _mode = self.mode else: - raise TypeError("mode in EigenmodeCoefficient must be an integer or a DiffractedPlanewave object") + raise TypeError( + "mode in EigenmodeCoefficient must be an integer or a DiffractedPlanewave object" + ) ob = self.sim.get_eigenmode_coefficients( self._monitor,