| import numpy as np | |
| def generate_sigma_x(x, dx, wavelength, domain_size, sigma_max=0.5, pml_factor=5): | |
| """ | |
| Generate the 1D PML damping profile sigma(x) for the x-dimension. | |
| Parameters: | |
| x : 1D numpy array of x coordinates. | |
| dx : grid spacing in x. | |
| wavelength : wavelength in microns. | |
| domain_size : total transverse domain size (in microns). | |
| sigma_max : maximum damping value (default 0.5). | |
| pml_factor : number of wavelengths to use for the PML thickness. | |
| Returns: | |
| sigma_x : 1D numpy array of damping values. | |
| """ | |
| pml_thickness = int(pml_factor * wavelength / dx) | |
| pml_width = pml_thickness * dx | |
| x_edge = domain_size / 2 - pml_width | |
| sigma_x = np.where(np.abs(x) > x_edge, | |
| sigma_max * ((np.abs(x) - x_edge) / pml_width) ** 2, | |
| 0) | |
| return sigma_x | |