Greg Baethge
Ansys Employee

Thank you for your patience! As I suspected, this calculation will rely on using the "S_polarization" result from the "S_params" analysis group. First, it will require 2 simulations. As discussed in Circular polarization and phase convention, we can reconstruct the circular polarization from 2 simulations, each with 1 source:
Source polarized along x
Source polarized along y
With these 2 simulations, we can then obtain RCP and LCP by combining the results. An important note, in the S parameter calculation, we apply a correction factor based on the refractive indices of the top and bottom material, this is so the S parameters of a planar structure match the Fresnel coefficient (see Metamaterial S parameter extraction). If you look at the analysis script, we have:
# Normalize S-parameters to source power
S11_Gn(i) = S11_Gn(i) * sqrt(R(i));
S21_Gn(i) = S21_Gn(i) * sqrt(T(i)) * (sqrt(refractive_index_1/refractive_index_2)); # correct amplitude if top/bottom substrates are different
S11_pol_Gn(i,1:2) = S11_pol_Gn(i,1:2) * sqrt(R(i));
S21_pol_Gn(i,1:2) = S21_pol_Gn(i,1:2) * sqrt(T(i)) * (sqrt(refractive_index_1/refractive_index_2)); # correct amplitude if top/bottom substrates are different
Where refractive_index_1 is the refractive index of the bottom material (where the reflection monitor is), and refractive_index_2, the one of the top material (where the transmission monitor is). For the polarization conversion efficiency, we need to remove this correction. So we will have:
Simulation 1 (polarization angle set to 0):
S_pol = getresult(sname,"S_polarization");
f = S_pol.f;
refractive_index_1 = real(getdata(sname+"::R_index","index_x"));
refractive_index_2 = real(getdata(sname+"::T_index","index_x"));

S21_x= S_pol.S21_Gn; # size = [length(f),2] (First column: s(y)-polarization component, second colum: p(x)-polarization component)
S21_x=S21_x/sqrt(refractive_index_1/refractive_index_2);
Simulation 2 (polarization angle set to 90):
S_pol = getresult(sname,"S_polarization");

S21_y= S_pol.S21_Gn;
S21_y=S21_y/sqrt(refractive_index_1/refractive_index_2);
With these 2 results, we can then build the response to a LCP and RCP input, using, for RCP, E_R = (E_x - 1i*E_y)/sqrt(2) and E_L=(E_x +1i*E_y)/sqrt(2) for LCP.
S21_L = (S21_x + 1i*S21_y)/sqrt(2);
S21_R = (S21_x - 1i*S21_y)/sqrt(2);
Finally, we can extract the LCP and RCP components in S21_L and S21_R:
S21_LR = (S21_R(:,1) + 1i*S21_R(:,2))/sqrt(2); # RCP input --> LCP output
S21_RR = (S21_R(:,1) - 1i*S21_R(:,2))/sqrt(2); # RCP input --> RCP output
S21_LL = (S21_L(:,1) + 1i*S21_L(:,2))/sqrt(2); # LCP input --> LCP output
S21_RL = (S21_L(:,1) - 1i*S21_L(:,2))/sqrt(2); # LCP input --> RCP output
Then, the conversion efficiency is given by abs(S21)^2, so you can get the conversion efficiency from RCP to LCP, etc.
Using this method, we got good agreements with Fig. 2e of Chen, W.T., Zhu, A.Y., Sanjeev, V. et al. A broadband achromatic metalens for focusing and imaging in the visible. Nature Nanotech13, 220ÔÇô226 (2018). https://doi.org/10.1038/s41565-017-0034-6
I hope this will help!