TAGGED: adjointsolver, LumericalMode, lumopt, scaling


April 2, 2024 at 12:19 pmOliver MüllerSubscriber
I'm trying to implement a new figure of merit in an adjoint sensitivity analysis with lumopt (Lumerical).
I don't understand what the phase prefactor (self.phase_prefactors in get_fom) and the adjoint field scaling factor (scaling_factor in get_adjoint_field_scaling) represent physically. The scaling of the adjoint field should include the measured intensity at the output from the forward simulation, but I don't see any of this in the code. Does anyone know what these scaling factors are? The definitions of the methods are found in modematch.py (figures_of_merit directory of lumopt)
Thanks a lot for any help!

April 5, 2024 at 10:19 pmTaylor RobertsonAnsys Employee
Hello Oliver,
Thanks for the question. This is an area where I admittedly don't understand all the details. In particular I am bit unclear on the constants and normalization, and haven't worked these out rigouously. That being said I can maybe help you pick up the thread for what is happening here.
The get_fom() function returns the phase prefactor from the the compex transmission coefficient. The magnitude of this complex coefficient squared is proportional to the power in the specified mode and is used in the fom calculation. Therfore the phase prefactor is proportional to the fields amplitude at the FOM monitor. The imaginary component (phase) of the scaling factor is then multiplied by the angular frequency.
In the optimization.py 'master script' get adjoin_field_scaling is called at line 841. The phase prefactor is then used in the gradient calculation to scale the adjoint fields, as you would expect  see gradients.py.
I hope this helps.

 You must be logged in to reply to this topic.

416

187

168

156

140
© 2024 Copyright ANSYS, Inc. All rights reserved.