Volume absorption for Bloch boundaries


I am currently testing scripts for volume absorption applied in CIS simulation, and facing some issues which are not so certain for me.
Here, I take reference from the examples of 2Dangular response (CMOS_angle_2D) and pabs_advanced (usr_absorption_advanced) :

  1. When we transfer to 3D simulation, should the filter for different interested area directly changed into “interested box”:
    for example, red_filter = (X >= red_x1) & (X <= red_x2) & (Y >= red_y1) & (Y <= red_y2);
    transfer into : red_filter = (X >= red_x1) & (X <= red_x2) & (Y >= red_y1) & (Y <= red_y2) & (Z >= red_z1) & (Z <= red_z2); and then integrate in this interested region, and the rest of the script just turn into 3d axis? Moreover, when I change the original script in 2D (Pred = integrate(Pabspinch(red_filter),1:2,x,y)into =>
    Pred = integrate2(Pabs
    A_filter,1:3,x,y,z); without "pinch(red_filter), it works. On the other hand, if I still use the original form with “pinch” there is error message:“matrix arguments of * are not the same size.” Why does this happen? Is that due to the source in not broadband and lead to the pinch(A_filter) removing frequency dimension and cause mismatch?

  2. For advanced method in Bloch boundaries correction, (for example, in the simulation of image sensor array for volume absorption,) :
    a) Since the monitors must extend across the entire simulation region in the directions where periodic boundaries are used, if we are only interested in specific region like mentioned in 1) filters, can this correction be ignored?
    (In other words, just avoid the monitors from boundaries and cover the interested regions at the same time, then determine the filter for integrate regions.)

b) In the Lumerical example, the absorption in the wavelength longer than 500nm is larger than 1, is that reasonable?


Hi @edward_chien
Could you please upload the simulation file with the “interested box” that you have chosen ?
Also, could you please explain to me, what is the functions of “integrate2” in python ? I tried to find some details about “integrate2”, but i couldn’t.

hi konslekk,

Thanks for replying.

Here is the description of integrate2 from Lumerical :

Attached is my interested simulation file.
I set up a 2x2 repeated structure which includes Silicon bulk surrounded by oxides. Only 1/4 of the structure is illuminated by design metal cap above silicon. To understand the optical behavior in the Silicon, I left a 0.2um slit without oxide at the bottom, trying to observe if the light spreads out through the illuminated area.
My interested region for power absorption is the illuminated region(PA in the script) and the Silicon region (PB.PC) right next to the illuminated region (PA.)

Moreover, I got one more question here:

If I change the oxide at the bottom of the bulk into PEC, which causes total reflection, is there any concern that the result of the field monitor because the vectors may cancel each other because of the reflection, and then making the power absorption analysis unreliable?

Thanks a lot!

I forgot to attache the file.
Here is it :

Pabs_test530_nm_polar_90.fsp (321.6 KB)


Sorry for the delayed reply. I checked the simulation file and found that in the 2D example online, during the calculation of the Pabs result from the pabs_2D analysis group contained within the volume analysis group used a pinch command which removed the frequency dimension of the Pabs result. This then required using the pinch command for the filter to get the filtered result. However, if the simulation was changed to measure multiple frequency points then the pinch would need to be removed to get a frequency-dependent result.

In the 3D example, for a single frequency simulation you can choose to either keep the analysis as-is which will result ion a 4D matrix for Pred where the last frequency dimension is a singleton dimension, or you could choose to pinch both the filter and the Pabs result to get rid of the frequency dimension.

Regarding question 2, if the monitors don’t extend through Bloch boundary conditions, the Bloch boundaries correction can be ignored.

Finally, regarding the absorption going above 1 in the Pabs example on the online Knowledge Base, ideally the value should not go above 1, but the settings used in the example were set so that the simulation could be run quickly and use less memory. The result gets closer to the analytic result as higher accuracy simulation settings are used. If you expand the “Example” section and scroll to the final note on higher accuracy simulation on the following page, it shows the result when using higher accuracy settings:

Hopefully this answers your questions!


Thanks very much for your reply!
That is what I thought for my confuse then :slight_smile: