Skip to content

Repository files navigation

3D-UPPE

This is the shared package to simulate, with MATLAB, pulse propagation in bulk crystal/gas/free space with 3D-UPPE.

It is useful for simulating solid-based or gas-filled multipass cell or multiplate compressor, etc.

The code is intended solely for academic use, reproducibility, and methodological clarity.

Caution

This repository is not under active development, as I finished my postdoc and am leaving academia.

Capabilities:

  1. It solves the pulse propagation with a nested RK4IP (Runge-Kutta under the interaction picture). Please find details in the 3D-UPPE's readme.
  2. Adaptive step-size control is implemented (for the nested RK4IP).
  3. Support broadband scenarios by having $\beta(\omega)$.
  4. Support both scalar and polarized scenarios, controlled with sim.scalar=true/false.
  5. Support noise-seeded processes, such as spontaneous Raman scattering, with the newly-developed noise model.
  6. Efficient GPU computation (with Nvidia CUDA) is implemented. It is controlled by sim.gpu_yes=true/false.
  7. Support radially-symmetric scheme with the Hankel transform for efficient modeling.
  8. Support both solid and gas environments.
  9. For gases, it supports both noble and Raman-active gases with the newly-developed vector Raman model [1].
  10. Support photoionization in both solids and gases with the Perelomov-Popov-Terent'ev (PPT) model.
  11. Support both pulsed and CW ($N_t=1$) cases. Full nonlinearity is supported in CW to fast simulate some phenomena, such as high-average-power self-focusing.

Fourier and Hankel transforms

Since I've seen many misuse of Fourier Transform, I wrote this tutorial. Please take a look. Briefly speaking for one misuse, it's necessary to use MATLAB's ifft for Fourier Transform into the spectral domain.
In addition, I have improved and implemented a new numerical Hankel transform scheme based on FHATHA, which might be publishable to a small journal (but I'm lazy). I put it in this arXiv tutorial as well. You can take a look if interested.

How to activate CUDA for GPU computing in MATLAB:

Typically MATLAB deals with this, but there are still come steps to follow before CUDA can really be used, especially when compiling .cu files to generate .ptx files. Below I show only steps for Windows. For linux, please search for their specific steps. I've never used Mac, so I cannot comment anything on this; some functions need to be revised for extended capabilities for Mac as far as I know.

  1. Install CUDA Toolkit
  2. Install Visual Studio Community. Only Desktop development with C++ is required. If it later says that it needs to install some other components due to the dependency issues, also install them. VS installation screenshot
  3. Add required path of Visual Studio to computer's environmental PATH; otherwise, MATLAB, during compiling .cu files, will say "cl.exe" cannot be found. add PATH screenshot
  4. Restart the computer if something is wrong. Connections between MATLAB and CUDA or Visual Studio requires restarting to be effective.

Warning

MATLAB supports only a certain version of CUDA and GPUs (support list). CUDA or GPU that is too old just isn't supported.

References (our papers):

  1. Raman scattering
  2. Noise modeling

Demonstrations:

  • Gas-filled Multipass cell
    A multipass cell acts as a discrete waveguide that is commonly used for pulse compression.
    Below is an Ar-filled multipass cell that compresses a 210-fs pulse to 35 fs (dechirped pulse shown on the right). Source: "3D-UPPE/Examples/Multipass cell/Gas-filled MPC/Ar"

  • Periodically-layered Kerr medium
    Periodically-layered medium in air can be a waveguide in nonlinear conditions.
    It acts as a discrete "nonlinear" waveguide with interleaving media of low (e.g., air) and high (e.g., thin glass) nonlinear refractive indices. Thin glass induces nonlinear self-focusing and air introduces diffraction. This artificially-contructed waveguide nonlinearly broadens the pulse, introducing self-phase modulation that can be compensated with a dechirper. This results in a temporally-compressed pulse. Typical compression factor is around 5.
    Source: "3D-UPPE/Examples/Periodically-layered Kerr medium (PLKM) compressor"

  • Self focusing (in silica)
    Pulse with high peak power experiences self-focusing in a Kerr medium with a positive nonlinear refractive index. The medium effectively acts as a lens, reducing the propagating beam size.
    Source: "3D-UPPE/Examples/Tutorial/2. pulsed/Self-focusing (non-waveguide)"

  • Self focusing with/without photoionization (in N2)
    Pulse with high peak power experiences self-focusing in a gas medium as in solids. Here in this case, the peak power is made so high that it ionizes the gas, which defocuses the beam.
    Below I show examples without (left column) and with (right column) the photoionization contribution. Without it, the beam only self-focuses due to electronic nonlinearity. In addition, photoionization-induced blueshift can be clearly seen.
    Source: "3D-UPPE/Examples/Self-focusing in gas (non-waveguide)"

Notes:

There is a readme.pdf in the Documentations/ folder of 3D-UPPE. Please find details of how to use this package in it. However, the fastest way to learn how to use this package is to learn from the examples in the Examples/ folder.

I'm Yi-Hao Chen, the author of the code and from Frank Wise's group at Cornell Applied Physics.

History:

  • 2/20/2025:
    Ar refractive index was wrong! I fixed it.
  • 3/10/2025:
    Added full nonlinearity support for CW. In the future, I decide to make the index z-dependent, which is commonly-known as "wave propagation method". However, compared to them, this model will have a full nonlinear support in both solid and gas, as well as supporting pulsed scenarios.
  • 3/15/2025:
    Finally finished implementing photoionization in both gases and solids. Current supported solid is silica only.

About

This is the shared package to simulate pulse propagation in bulk material (solid and gas) with 3D-UPPE

Resources

Stars

17 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages