We’re putting the final touches on our new badges platform. Badge issuance remains temporarily paused, but all completions are being recorded and will be fulfilled once the platform is live. Thank you for your patience.
Photonics

Photonics

Topics related to Lumerical and more.

How to map a general phase profile to design a metalens

    • Doctorwho
      Subscriber

      In the metalens example, I found that the coding firstly map the 1D phase profile at each x position (x_mask) to the radii,

    • Taylor Robertson
      Ansys Employee

    • Taylor Robertson
      Ansys Employee

      I think the question is about constructing a non axially symmetric phase target. If you refer to the phase equation being solved for here, you can see that is actually axially symmetric because you can write it as a function of r^2. For that reason it is sufficient to solve it along y=0,.
      This is exactly what is being done in the lines of code, you shared.
      If you have a phase target that is not axially symmetric, you would probably need to write this as a function of two variables, with x, and y being the easiest choice, due the rectangular tiling of the meta atoms. I would suggest looping over x, y and constructing a 2D phase target array with. Then you could solve for the phase target at each position using scaler values. It would probably be OK to convert x_mask, y_mask from vectors to 2D arrays. The use array operations instead of loop, but this might be a bit more difficult. It could look something like this.
      for (n =1:length(x_mask(n)){
      for(m = 1:length(y_mask(m)){
      ...
      phase_target(m,n) = f ( x_mask(n),y_mask(m)) ;
      ...
      }}
      Next when you create the radius mask, this would need to be a 2D array, but you could use the 2D version of interp - Script command.
      Finally, adding the pillars would no longer be cylindrically symmetric, so again you could make this a two level loop of x and y instead of just r.
      I hope this answers your question. Let us know if you have any trouble with the details.

      Best Regards


    • Taylor Robertson
      Ansys Employee

      I think the question is about constructing a non axially symmetric phase target. If you refer to the phase equation being solved for here, you can see that is actually axially symmetric because you can write it as a function of r^2. For that reason it is sufficient to solve it along y=0,.
      This is exactly what is being done in the lines of code, you shared.
      If you have a phase target that is not axially symmetric, you would probably need to write this as a function of two variables, with x, and y being the easiest choice, due the rectangular tiling of the meta atoms. I would suggest looping over x, y and constructing a 2D phase target array with. Then you could solve for the phase target at each position using scaler values. It would probably be OK to convert x_mask, y_mask from vectors to 2D arrays. The use array operations instead of loop, but this might be a bit more difficult. It could look something like this.
      for (n =1:length(x_mask(n)){
      for(m = 1:length(y_mask(m)){
      ...
      phase_target(m,n) = f ( x_mask(n),y_mask(m)) ;
      ...
      }}
      Next when you create the radius mask, this would need to be a 2D array, but you could use the 2D version of interp - Script command.
      Finally, adding the pillars would no longer be cylindrically symmetric, so again you could make this a two level loop of x and y instead of just r.
      I hope this answers your question. Let us know if you have any trouble with the details.

      Best Regards


    • Taylor Robertson
      Ansys Employee

      I think the question is about constructing a non axially symmetric phase target. If you refer to the phase equation being solved for here, you can see that is actually axially symmetric because you can write it as a function of r^2. For that reason it is sufficient to solve it along y=0,.
      This is exactly what is being done in the lines of code, you shared.
      If you have a phase target that is not axially symmetric, you would probably need to write this as a function of two variables, with x, and y being the easiest choice, due the rectangular tiling of the meta atoms. I would suggest looping over x, y and constructing a 2D phase target array with. Then you could solve for the phase target at each position using scaler values. It would probably be OK to convert x_mask, y_mask from vectors to 2D arrays. The use array operations instead of loop, but this might be a bit more difficult. It could look something like this.
      for (n =1:length(x_mask(n)){
      for(m = 1:length(y_mask(m)){
      ...
      phase_target(m,n) = f ( x_mask(n),y_mask(m)) ;
      ...
      }}
      Next when you create the radius mask, this would need to be a 2D array, but you could use the 2D version of interp - Script command.
      Finally, adding the pillars would no longer be cylindrically symmetric, so again you could make this a two level loop of x and y instead of just r.
      I hope this answers your question. Let us know if you have any trouble with the details.

      Best Regards


    • Doctorwho
      Subscriber
      Thank you very much for your help! I will try the way you suggested.

Viewing 5 reply threads
  • The topic ‘How to map a general phase profile to design a metalens’ is closed to new replies.