You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In cylindrical coordinates, computing the response from a point dipole $\delta(r - r_0)\delta(\phi)\delta(z - z_0)$ involves a Fourier-series expansion of the fields from a ring current source requiring $M+1$ simulations ($M$ is an integer determined by the cutoff threshold of the power radiated by the current source) as demonstrated in Tutorial/Nonaxisymmetric Dipole Sources. Computing the radiation pattern of a point dipole, as demonstrated in Tutorial/Extraction Efficiency of a Collection of Dipoles in a Disc, currently involves performing a near-to-far field transformation $M+1$ times for each point (or rather each polar angle $\theta$) in the far field using get_farfield. The near-to-far field calculations can be expensive when: (1) the near-field DFT monitor involves many grid points, (2) there are a large number of far field points, and (3) there are multiple frequencies (though this can be sped up using multithreading).
For reference, the current approach to computing the radiation pattern is described in the tutorial as follows:
As a performance optimization, it would be better to: (1) accumulate the DFT near fields from the Fourier-series expansion and (2) perform a single near-to-far field transformation using the total DFT near fields from (1) at the end of the run. This is equivalent to computing the equivalent current sources from the total DFT near fields for $\vec{E_+}$ and $\vec{H_+}$:
To support this feature, we would need to provide a new method add_near2far_data(self, near2far, n2fdata) to the DftObj class to add n2fdata to near2far, objects which are returned by the meep.Simulation.add_near2far method. The new method would be similar to the existing load_near2far_data(self, near2far, n2fdata) method but instead of replacing the near2far object with n2fdata would add to it. (Note that there is already a scale_near2far_fields(s, near2far) method which can be used to weight the DFT near fields near2far by a complex number s.)
The text was updated successfully, but these errors were encountered:
As a performance optimization, it would be better to: (1) accumulate the DFT near fields from the Fourier-series expansion and (2) perform a single near-to-far field transformation using the total DFT near fields from
The problem is that you can't simply sum the near fields in the rz plane (i.e. at φ=0), because they have different φ dependencies.
So, I think you would still need to safe the DFT near fields separately for each m. You might gain some speed by putting the sum over m inside the near2far transform (so that for each point r,z,φ in the near field, you first sum over m to get the near-field amplitude, and then compute the far-field contributions once for that point).
Assuming the FDTD simulation is the majority of the time, however, you still won't gain much overall.
In cylindrical coordinates, computing the response from a point dipole$\delta(r - r_0)\delta(\phi)\delta(z - z_0)$ involves a Fourier-series expansion of the fields from a ring current source requiring $M+1$ simulations ($M$ is an integer determined by the cutoff threshold of the power radiated by the current source) as demonstrated in Tutorial/Nonaxisymmetric Dipole Sources. Computing the radiation pattern of a point dipole, as demonstrated in Tutorial/Extraction Efficiency of a Collection of Dipoles in a Disc, currently involves performing a near-to-far field transformation $M+1$ times for each point (or rather each polar angle $\theta$ ) in the far field using
get_farfield
. The near-to-far field calculations can be expensive when: (1) the near-field DFT monitor involves many grid points, (2) there are a large number of far field points, and (3) there are multiple frequencies (though this can be sped up using multithreading).For reference, the current approach to computing the radiation pattern is described in the tutorial as follows:
As a performance optimization, it would be better to: (1) accumulate the DFT near fields from the Fourier-series expansion and (2) perform a single near-to-far field transformation using the total DFT near fields from (1) at the end of the run. This is equivalent to computing the equivalent current sources from the total DFT near fields for$\vec{E_+}$ and $\vec{H_+}$ :
To support this feature, we would need to provide a new method
add_near2far_data(self, near2far, n2fdata)
to theDftObj
class to addn2fdata
tonear2far
, objects which are returned by themeep.Simulation.add_near2far
method. The new method would be similar to the existingload_near2far_data(self, near2far, n2fdata)
method but instead of replacing thenear2far
object withn2fdata
would add to it. (Note that there is already ascale_near2far_fields(s, near2far)
method which can be used to weight the DFT near fieldsnear2far
by a complex numbers
.)The text was updated successfully, but these errors were encountered: