fdtd
fdtd copied to clipboard
Field in position of source
Hi @flaport, Happy New Year! At FDTD calculations I need to periodically change the power of a source (initially F_0) dependently on the local field amplitude E_0. So first I have to know the amplitude of field E_0 in current position of a source in 3D. Latter I will modify the power of this source periodically as F_{n+1} = f(E_n)*F_n with the interval dt. As I understand, to do that I have to periodically remove old source (n) from the grid and insert in this position new source (n+1). What is the optimal way to do all of that? Thank you in advance.
hey @GenB31415 ,
It's probably best to write a custom source for this. The grid to which the source is attached is available as self.grid
, and hence you have access to the field values at the current time step.
To write a custom source you just have to an update_E and an update_H method (look for example at sources.py).
For example, you could do something like this:
class MyPointSource(PointSource):
def update_E(self):
E_n = self.grid.E[self.x, self.y, self.z, 2]
E_n[:, :, :] = my_func(E_n) * En
Hi @flaport, please specify the formula of spatial shape of the fdtd.LineSource. In the docs it is only indicated “""Create a LineSource with a gaussian profile. Does it mean \exp(-(x-x0)^2-(y-y0)^2-(z-z0)^2) ? Is it possible to indicate a width of a gaussian? Thanks
May be it is better to replace the word LineSource by PlaneSource in the description of PlaneSource ?
PlaneSource class
class PlaneSource: """A source along a plane in the FDTD grid"""
def __init__(...)
"""Create a **_LineSource_** with a gaussian profile