(self)
| 260 | ) |
| 261 | |
| 262 | def forward_run(self): |
| 263 | # set up monitors |
| 264 | self.prepare_forward_run() |
| 265 | |
| 266 | # Forward run |
| 267 | if any(isinstance(m, LDOS) for m in self.objective_arguments): |
| 268 | self.sim.run( |
| 269 | mp.dft_ldos(self.frequencies), |
| 270 | *self.step_funcs, |
| 271 | until_after_sources=mp.stop_when_dft_decayed( |
| 272 | self.decay_by, self.minimum_run_time, self.maximum_run_time |
| 273 | ), |
| 274 | ) |
| 275 | else: |
| 276 | self.sim.run( |
| 277 | *self.step_funcs, |
| 278 | until_after_sources=mp.stop_when_dft_decayed( |
| 279 | self.decay_by, self.minimum_run_time, self.maximum_run_time |
| 280 | ), |
| 281 | ) |
| 282 | |
| 283 | # record objective quantities from user specified monitors |
| 284 | self.results_list = [m() for m in self.objective_arguments] |
| 285 | # evaluate objectives |
| 286 | self.f0 = [fi(*self.results_list) for fi in self.objective_functions] |
| 287 | if len(self.f0) == 1: |
| 288 | self.f0 = self.f0[0] |
| 289 | |
| 290 | # store objective function evaluation in memory |
| 291 | self.f_bank.append(self.f0) |
| 292 | |
| 293 | # update solver's current state |
| 294 | self.current_state = "FWD" |
| 295 | |
| 296 | def prepare_adjoint_run(self): |
| 297 | # Compute adjoint sources |
no test coverage detected