Topics related to Lumerical and more

how to determine the focusing efficiency in the metalens using Lumerical FDTD?


    • p21201100

      Focusing efficiency is defined as the ratio of the energy in the focal plane within the range of three times the FWHM spot size to the total energy incident through the focal plane. How can I calculate FWHM and focusing efficiency. Can you illustrate with the example of Metalens - Zemax Interoperability? If you come to a relevant conclusion, please post it. Looking forward to hearing from the official members. thanks

    • Guilin Sun
      Ansys Employee
      In this case, you have a clear definition. SO what you can do is to get the monitor data for the Poynting Vector from the monitor on the focus plane, extract the Poynting vector along the propagation axis, and then integrate only the part inside FWHM. To simplify your script, you can create a window function (Suppose you have Pz):


      Xr and Yr as half of the FWHM in xy, and then




      window=( (X>-Xr)*(X-Yr)*(Y

      So you get the window to filter only the interested area.

      Suppose you have Pz, Then



      where f is the frequency.

      Please refer this tested script:










      window=( (X>-Xr)*(X-Yr)*(Y



      This uses the power ratio. I am not sure how do you get the energy ratio and if it is meaningful. Please refer Ansys Insight: 光学强度、功率、电场强度平方的关系以及电磁能量
    • p21201100
      R =10.4e-6;
      f = 20e-6;
      E = getresult("monitor","E");
      x = E.x;
      y = E.y;
      ind = find(x,[-R,R]); # limit the x range for plot

      # choose area to plot and spatial resolution
      x = linspace(-R,R,100);
      y = linspace(-R,R,100);
      z = linspace(1e-6,1.5*f,100);
      E2_z = farfieldexact3d('monitor',0,0,z);
      E2_z = pinch(sum(abs(E2_z)^2,4));

      ind = find(E2_z,max(E2_z));
      zm = z(ind);

      E2_x = farfieldexact3d('monitor',x,0,zm);
      E2x_max = max(E2_x);
      E2y_max = max(E2_x);

      n1 = find(E2_x(1:find(E2_x, E2x_max)), E2x_max/2);
      ?x1 = x(n1);
      n2 = find(E2_x(find(E2_x, E2x_max):end), E2x_max/2);
      ?x2 = x(find(E2_x, E2x_max)+n2);

      ?FWHM = x2 - x1;
      radius = FWHM/2;
      E = farfieldexact3d('monitor', x, y, z, 1:length(f));
      Ex = pinch(E, 4, 1);
      Ey = pinch(E, 4, 2);
      Ez = pinch(E, 4, 3);
      E2 = abs(Ex)^2 + abs(Ey)^2 + abs(Ez)^2;
      E2total = integrate(E2, 1:2, x, y);
      X = meshgridx(x,y);
      Y = meshgridy(x,y);
      filter = (X^2 + Y^2) <= radius^2;
      E2filtered = pinch(E2) * filter;
      E2spot = integrate(E2filtered, 1:2, x, y);
      Feff = E2spot/E2total;

      thank you for your answer. I have compiled the following program with reference to the solutions given in the forum. Could you please help me to see if there are errors in the calculation of FWHM and focusing efficiency posted.
      • A.Abdur Rahman Akib

        Hi I was trying to use this script but on the line

        "E2filtered = pinch(E2) * filter;"

        I am getting the following error: 
        "matrix arguments of * are not the same size"

        I am a bit clueless here, do you have any idea for solving it?

    • Guilin Sun
      Ansys Employee
      The script works.
      As a rule of thumb, I would suggest to use different symbols for different variables. eg, you may need to keep the monitor xyz and then define new xy at the focus.
      it seems you first use x direction to get FWHM, which is not necessary. Once you know the focus plane, and define the projected xy, you can get the 2D projected field and intensity, and search the FWHM in the two directions. The focus spot may not be circular.

Viewing 3 reply threads
  • The topic ‘how to determine the focusing efficiency in the metalens using Lumerical FDTD?’ is closed to new replies.