


{"id":426891,"date":"2025-03-26T07:59:38","date_gmt":"2025-03-26T07:59:38","guid":{"rendered":"https:\/\/innovationspace.ansys.com\/forum\/forums\/topic\/abnormal-gradients-in-multi-port-power-optimization-of-2x3-mmi-using-lumopt\/"},"modified":"2025-03-26T16:25:15","modified_gmt":"2025-03-26T16:25:15","slug":"abnormal-gradients-in-multi-port-power-optimization-of-2x3-mmi-using-lumopt","status":"publish","type":"topic","link":"https:\/\/innovationspace.ansys.com\/forum\/forums\/topic\/abnormal-gradients-in-multi-port-power-optimization-of-2x3-mmi-using-lumopt\/","title":{"rendered":"Abnormal gradients in multi &#8211; port power optimization of 2&#215;3 MMI using Lumopt"},"content":{"rendered":"<p>&lt;p&gt;&lt;p&gt;We&#8217;ve written the following code to attempt the inverse design of a 2&#215;3 MMI device using Lumopt. The goal is to achieve equal power at the three output ports when two mode light sources enter through two input ports respectively. However, we&#8217;ve noticed that the actual FOM curve doesn&#8217;t trend towards a gradual reduction in insertion loss. Why is this the case? Could you please provide me with professional advice and assistance? Thank you!&lt;br&gt;&lt;br&gt;def runSim(params, eps_bg, eps_wg, x_pos, y_pos, size_x, size_y, filter_R, working_dir, beta):&lt;br&gt;&lt;br&gt;######## DEFINE GEOMETRY ########&lt;br&gt;geometry = TopologyOptimization2D(params=params, eps_min=eps_bg, eps_max=eps_wg, x=x_pos, y=y_pos, z=0, filter_R=filter_R, beta=beta)&lt;br&gt;&lt;br&gt;######## DEFINE FIGURE OF MERIT FOR EACH OUTPUT WAVEGUIDE ########&lt;br&gt;<a href=\"https:\/\/innovationspace.ansys.com\/community\/?hashtag\/fom1\/\" target=\"_blank\" rel=\"noopener\">&lt;span class=&#8221;ps-stream-hashtag&#8221;&gt;#fom1&lt;\/span&gt;<\/a>&nbsp;= ModeMatch(monitor_name = &#8216;fom_1&#8217;, mode_number = &#8216;Fundamental TE mode&#8217;, direction = &#8216;Forward&#8217;, norm_p = 2, target_fom=1\/3)&lt;br&gt;<a href=\"https:\/\/innovationspace.ansys.com\/community\/?hashtag\/fom2\/\" target=\"_blank\" rel=\"noopener\">&lt;span class=&#8221;ps-stream-hashtag&#8221;&gt;#fom2&lt;\/span&gt;<\/a>&nbsp;= ModeMatch(monitor_name = &#8216;fom_2&#8217;, mode_number = &#8216;Fundamental TE mode&#8217;, direction = &#8216;Forward&#8217;, norm_p = 2, target_fom=1\/3)&lt;br&gt;<a href=\"https:\/\/innovationspace.ansys.com\/community\/?hashtag\/fom3\/\" target=\"_blank\" rel=\"noopener\">&lt;span class=&#8221;ps-stream-hashtag&#8221;&gt;#fom3&lt;\/span&gt;<\/a>&nbsp;= ModeMatch(monitor_name = &#8216;fom_3&#8217;, mode_number = &#8216;Fundamental TE mode&#8217;, direction = &#8216;Forward&#8217;, norm_p = 2, target_fom=1\/3)&lt;br&gt;fom1 = ModeMatch(monitor_name=&#8217;fom_1&#8242;, mode_number=&#8217;Fundamental TE mode&#8217;, direction=&#8217;Forward&#8217;, norm_p=2, target_T_fwd=lambda wl: 1\/3 * np.ones(wl.size))&lt;br&gt;fom2 = ModeMatch(monitor_name=&#8217;fom_2&#8242;, mode_number=&#8217;Fundamental TE mode&#8217;, direction=&#8217;Forward&#8217;, norm_p=2, target_T_fwd=lambda wl: 1\/3 * np.ones(wl.size))&lt;br&gt;fom3 = ModeMatch(monitor_name=&#8217;fom_3&#8242;, mode_number=&#8217;Fundamental TE mode&#8217;, direction=&#8217;Forward&#8217;, norm_p=2, target_T_fwd=lambda wl: 1\/3 * np.ones(wl.size))&lt;br&gt;&lt;br&gt;######## DEFINE OPTIMIZATION ALGORITHM ########&lt;br&gt;optimizer1 = ScipyOptimizers(max_iter=400, method=&#8217;L-BFGS-B&#8217;, pgtol=1e-6, ftol=1e-5, scale_initial_gradient_to=0.25)&lt;br&gt;optimizer2 = ScipyOptimizers(max_iter=400, method=&#8217;L-BFGS-B&#8217;, pgtol=1e-6, ftol=1e-5, scale_initial_gradient_to=0.25)&lt;br&gt;optimizer3 = ScipyOptimizers(max_iter=400, method=&#8217;L-BFGS-B&#8217;, pgtol=1e-6, ftol=1e-5, scale_initial_gradient_to=0.25)&lt;br&gt;optimizer4 = ScipyOptimizers(max_iter=400, method=&#8217;L-BFGS-B&#8217;, pgtol=1e-6, ftol=1e-5, scale_initial_gradient_to=0.25)&lt;br&gt;optimizer5 = ScipyOptimizers(max_iter=400, method=&#8217;L-BFGS-B&#8217;, pgtol=1e-6, ftol=1e-5, scale_initial_gradient_to=0.25)&lt;br&gt;optimizer6 = ScipyOptimizers(max_iter=400, method=&#8217;L-BFGS-B&#8217;, pgtol=1e-6, ftol=1e-5, scale_initial_gradient_to=0.25)&lt;br&gt;&lt;br&gt;&lt;br&gt;######## DEFINE SETUP SCRIPT AND INDIVIDUAL OPTIMIZERS ########&lt;br&gt;script1 = load_from_lsf(&#8216;E:\/CHH\/Mixer with lumopt\/2&#215;3 MMI Mixer input1 bend 6&#215;6.lsf&#8217;)&lt;br&gt;script2 = load_from_lsf(&#8216;E:\/CHH\/Mixer with lumopt\/2&#215;3 MMI Mixer input2 bend 6&#215;6.lsf&#8217;)&lt;br&gt;# script1 = script.replace(&#8216;opt_size_x=36e-6&#8242;,&#8217;opt_size_x={:1.6g}&#8217;.format(size_x))&lt;br&gt;# script1 = script.replace(&#8216;opt_size_y=6e-6&#8242;,&#8217;opt_size_y={:1.6g}&#8217;.format(size_y))&lt;br&gt;&lt;br&gt;wavelengths = Wavelengths(start = 1550e-9, stop = 1550e-9, points = 1)&lt;br&gt;opt1 = Optimization(base_script=script1, wavelengths = wavelengths, fom=fom1, geometry=geometry, optimizer=optimizer1,&lt;br&gt;use_deps=False, hide_fdtd_cad=True, plot_history=False, store_all_simulations=False, save_global_index=True)&lt;br&gt;opt2 = Optimization(base_script=script1, wavelengths = wavelengths, fom=fom2, geometry=geometry, optimizer=optimizer2,&lt;br&gt;use_deps=False, hide_fdtd_cad=True, plot_history=False, store_all_simulations=False, save_global_index=False)&lt;br&gt;opt3 = Optimization(base_script=script1, wavelengths = wavelengths, fom=fom3, geometry=geometry, optimizer=optimizer3,&lt;br&gt;use_deps=False, hide_fdtd_cad=True, plot_history=False, store_all_simulations=False, save_global_index=False)&lt;br&gt;opt4 = Optimization(base_script=script2, wavelengths=wavelengths, fom=fom1, geometry=geometry, optimizer=optimizer4,&lt;br&gt;use_deps=False, hide_fdtd_cad=True, plot_history=False, store_all_simulations=False, save_global_index=True)&lt;br&gt;opt5 = Optimization(base_script=script2, wavelengths=wavelengths, fom=fom2, geometry=geometry, optimizer=optimizer5,&lt;br&gt;use_deps=False, hide_fdtd_cad=True, plot_history=False, store_all_simulations=False, save_global_index=False)&lt;br&gt;opt6 = Optimization(base_script=script2, wavelengths=wavelengths, fom=fom3, geometry=geometry, optimizer=optimizer6,&lt;br&gt;use_deps=False, hide_fdtd_cad=True, plot_history=False, store_all_simulations=False, save_global_index=False)&lt;br&gt;&lt;br&gt;######## PUT EVERYTHING TOGETHER AND RUN ########&lt;br&gt;weights = [0.5, 0.5, 0.5, 0.5, 0.5, 0.5]&lt;br&gt;opT = [opt1, opt2, opt3, opt4, opt5, opt6]&lt;br&gt;opt = SuperOptimization(optimizations=opT,weights=weights)&lt;br&gt;opt.run(working_dir=working_dir)&lt;br&gt;&lt;br&gt;&lt;br&gt;if __name__ == &#8216;__main__&#8217;:&lt;br&gt;size_x = 12000&lt;br&gt;size_y = 6000&lt;br&gt;filter_R = 200e-9&lt;br&gt;&lt;br&gt;x_points=int(size_x\/20)+1&lt;br&gt;y_points=int(size_y\/20)+1&lt;br&gt;eps_wg = 2.8**2&lt;br&gt;eps_bg = 1.44**2&lt;br&gt;x_pos = np.linspace(-size_x\/2*1e-9,size_x\/2*1e-9,x_points)&lt;br&gt;y_pos = np.linspace(-size_y\/2*1e-9,size_y\/2*1e-9,y_points)&lt;br&gt;&lt;br&gt;## We need to pick an initial condition. Many different options:&lt;br&gt;# params = 0.5*np.ones((x_points,y_points)) #&lt; Start with the domain filled with (eps_wg+eps_bg)\/2&lt;br&gt;<a href=\"https:\/\/innovationspace.ansys.com\/community\/?hashtag\/params\/\" target=\"_blank\" rel=\"noopener\">&lt;span class=&#8221;ps-stream-hashtag&#8221;&gt;#params&lt;\/span&gt;<\/a>&nbsp;= np.ones((x_points,y_points)) #&lt; Start with the domain filled with eps_wg&lt;br&gt;<a href=\"https:\/\/innovationspace.ansys.com\/community\/?hashtag\/params\/\" target=\"_blank\" rel=\"noopener\">&lt;span class=&#8221;ps-stream-hashtag&#8221;&gt;#params&lt;\/span&gt;<\/a>&nbsp;= np.zeros((x_points,y_points)) #&lt; Start with the domain filled with eps_bg&lt;br&gt;params = None #&lt; Use the structure defined in the project file as initial condition&lt;br&gt;&lt;br&gt;working_dir = &#8216;2x3_MMI_Mixer_2scripts_x{:04d}_y{:04d}_f{:04d}&#8217;.format(size_x,size_y,int(filter_R*1e9))&lt;br&gt;runSim(params, eps_bg, eps_wg, x_pos, y_pos, size_x*1e-9, size_y*1e-9, filter_R, working_dir=working_dir, beta=1)<img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/forum\/wp-content\/uploads\/sites\/2\/2025\/03\/26-03-2025-1742975903-optimization3_0.png\" alt=\"NONE\" \/>&lt;\/p&gt;&lt;\/p&gt;<\/p>\n","protected":false},"template":"","class_list":["post-426891","topic","type-topic","status-publish","hentry","topic-tag-lumopt-1","topic-tag-mmi-2"],"aioseo_notices":[],"acf":[],"custom_fields":[{"0":{"_bbp_forum_id":["27833"],"_bbp_topic_id":["426891"],"_bbp_author_ip":["2408:8453:618:aead:7023:7e55:7142:7b1d"],"_bbp_last_reply_id":["427515"],"_bbp_last_active_id":["427515"],"_bbp_last_active_time":["2025-04-01 10:29:11"],"_bbp_reply_count":["3"],"_bbp_reply_count_hidden":["0"],"_bbp_voice_count":["3"],"_bbp_engagement":["520400","473055","294329"],"_btv_view_count":["259"],"_bbp_topic_status":["unanswered"],"_edit_last":["473055"],"_bbp_revision_log":["a:1:{i:426999;a:2:{s:6:\"author\";i:473055;s:6:\"reason\";s:0:\"\";}}"],"_bbp_subscription":["473055","294329","520400"]},"test":"longchdtu-dk"}],"_links":{"self":[{"href":"https:\/\/innovationspace.ansys.com\/forum\/wp-json\/wp\/v2\/topics\/426891","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/innovationspace.ansys.com\/forum\/wp-json\/wp\/v2\/topics"}],"about":[{"href":"https:\/\/innovationspace.ansys.com\/forum\/wp-json\/wp\/v2\/types\/topic"}],"version-history":[{"count":1,"href":"https:\/\/innovationspace.ansys.com\/forum\/wp-json\/wp\/v2\/topics\/426891\/revisions"}],"predecessor-version":[{"id":426999,"href":"https:\/\/innovationspace.ansys.com\/forum\/wp-json\/wp\/v2\/topics\/426891\/revisions\/426999"}],"wp:attachment":[{"href":"https:\/\/innovationspace.ansys.com\/forum\/wp-json\/wp\/v2\/media?parent=426891"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}