Skip to main content

Finite difference time domain simulation (for slit diffraction)

Project description

AK FDTD

version=0.2.2

author Alexander V. Korovin [a.v.korovin73@gmail.com], Homepage

Overview

AK FDTD is a Python package designed for simple finite difference time domain (FDTD) simulation in open space. It allows you to test slit diffraction.

2D case

slit diffraction

3D case

slit diffraction

An example of light diffraction on a slit located in the center of the computational domain. Light falls on a screen with a slit from above (the speed of light is taken as unity). The intensity graph is a time-averaged square of the field.

Features

  • PML: implementation of perfectly matched boundary layers.

Installation

You can install AKFDTD using pip. To install the latest version from PyPI, use:

pip install AKFDTD

Work with object in 2D case

  • EM2D(Lx, Ly, Nx, Ny, wavelength): initialization of the simulator object, where Lx is the x dimension of the simulation domain, Ly is the y dimension of the simulation domain, Nx is the number of sampling points along the x axis, Ny is the number of sampling points along the y axis, wavelength is the wavelength of the incoming plane wave.

  • .set_slit(condition_func)(optional): method to set slit(s) by condition function, condition_func is the function of two arguments (f(x,y)) to set zeros in the electric field (PEC).

  • .start_until(N_cycles)(optional): method for performing N_cycles simulation cycles necessary to avoid observing the wave start from above.

  • .update(): method of updating fields over time (one simulation cycle).

  • .get_x(show_PML): method to get x coordinates with or without PML region (default is show_PML=False).

  • .get_y(show_PML): method to get y coordinates with or without PML region (default is show_PML=False).

  • .get_Ez(show_PML): method for obtaining the z-component of the electric field with or without the PML region (default is show_PML=False).

Test in 3D

from FDTD.fdtd3D import EM3D
from FDTD.display_fields import DisplayFields3D


if __name__ == "__main__":
    # display PML region
    show_PML = False
    # show_PML = True

    # display absolute value of the Poynting vector
    show_Poynting = True
    # show_Poynting = False

    # display of the field distribution along the center of the calculation area
    show_xy = False
    # show_xy = True

    # incoming plane wave wavelength
    wavelength_init = 3.
    wavelength_min = 1.
    wavelength_max = 5.

    # simulation domain
    Lx = 30
    Ly = 20
    Lz = 20
    # Nx = 300
    # Ny = 201
    # Nz = 202
    Nx = 200
    Ny = 151
    Nz = 152

    # slit width
    slit_width_init = 3
    slit_width_min = 1
    slit_width_max = 10
    slit_position_init = -Lx/2 + 8
    slit_screen_thickness = 0.5

    # create FDTD domain and initialize fields3D
    fields = EM3D(Lx=Lx, Ly=Ly, Lz=Lz, Nx=Nx, Ny=Ny, Nz=Nz, wavelength=wavelength_init)

    # set single rectangular slit
    def slit_func(hy, hz):
        x0 = slit_position_init
        hx = slit_screen_thickness
        y0 = 0
        z0 = 0
        condition_func = lambda x, y, z: (x0 - hx/2 < x) & (x< x0 + hx/2) & \
                                      ((y0 - hy/2 > y) | (y > y0 + hy/2) | (z0 - hz/2 > z) | (z > z0 + hz/2))
        fields.set_slit(condition_func)

    slit_func(slit_width_init, slit_width_init)

    # Initial condition
    N_cycles = 500
    # N_cycles = 1

    DisplayFields3D.N_cycles = N_cycles
    display_fields = DisplayFields3D(
        fields,
        displayed_wavelengths=(wavelength_min, wavelength_init, wavelength_max),
        displayed_slit_widths=(slit_width_min, slit_width_init, slit_width_max),
        slit_func=slit_func,
        show_Poynting=show_Poynting, show_PML=show_PML, show_xy=show_xy)
    display_fields.show()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

AKFDTD-0.2.2.tar.gz (188.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

AKFDTD-0.2.2-py3-none-any.whl (18.7 kB view details)

Uploaded Python 3

File details

Details for the file AKFDTD-0.2.2.tar.gz.

File metadata

  • Download URL: AKFDTD-0.2.2.tar.gz
  • Upload date:
  • Size: 188.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.8.10

File hashes

Hashes for AKFDTD-0.2.2.tar.gz
Algorithm Hash digest
SHA256 2cfc2bb179a9f9402fddf40b33e55c80cea37de2e230eefab3b820d92429f121
MD5 e5ec08525c4664a306c43a93e15b7554
BLAKE2b-256 8ce9c288c00ede24cc0d041d083b9acddaa452bbda99bdd1bc12e401c0229b15

See more details on using hashes here.

File details

Details for the file AKFDTD-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: AKFDTD-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 18.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.8.10

File hashes

Hashes for AKFDTD-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a7d155a7c5d2417f1fc07223dd911920cd34e0a95763e9823c1a6b48809730ff
MD5 2d460a7abeec34494fe0e82fed21135d
BLAKE2b-256 79e61b95bfeb6857b5a9e1bbf99b113f4311338ca638ba3c403c42de05ed6fdd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page