Skip to content

KlenM/pyAtmosphere

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pyAtmosphere

Physics-based simulation of light propagation in turbulent atmosphere.

Installation

*Highly recommend to use virtual environment.

Use the package manager pip to install required packages.

pip install -r requirements.txt

If you want to use GPU for simulation, you need to install CUDA on your machine. Additinally, the cupy python package is required. For example, for CUDA 11.0:

pip install cupy-cuda110

Usage

GPU usage

If you want to enable GPU simulation, execute at the beginning of your script:

from pyatmosphere import gpu
gpu.config['use_gpu'] = True

QuickChannel example

from pyatmosphere import QuickChannel

quick_channel = QuickChannel(
    Cn2=1e-15,
    length=10000,
    count_ps=5,
    beam_w0=0.09,
    beam_wvl=8.08e-07,
    aperture_radius=0.12
    )

quick_channel.plot()

Advanced channel

import numpy as np
from pyatmosphere import (
    Channel,
    RectGrid,
    RandLogPolarGrid,
    GaussianSource,
    IdenticalPhaseScreensPath,
    SSPhaseScreen,
    CirclePupil,
    MVKModel,
    measures
    )

channel = Channel(
    grid=RectGrid(
        resolution=2048, 
        delta=0.0015
    ),
    source=GaussianSource(
        wvl=808e-9,
        w0=0.12,
        F0=np.inf
    ),
    path=IdenticalPhaseScreensPath(
        phase_screen=SSPhaseScreen(
            model=MVKModel(
                Cn2=5e-16,
                l0=6e-3,
                L0=1e3,
            ),
            f_grid=RandLogPolarGrid(
                points=2**10, 
                f_min=1 / 1e3 / 15, 
                f_max=1 / 6e-3 * 2
            )
        ),
        length=50e3,
        count=5
    ),
    pupil=CirclePupil(
        radius=0.2
    ),
)

channel_output = channel.run(pupil=False)
intensity = measures.I(channel, output=channel_output)
mean_x = measures.mean_x(channel, output=channel_output)

Simulations

from pyatmosphere import simulations

beam_result = simulations.BeamResult(quick_channel, max_size=2000)
pdt_result = simulations.PDTResult(quick_channel, max_size=6000)
sim = simulations.Simulation([beam_result, pdt_result])
sim.run(plot_step=1000)

Citing

If you make use of this software, please cite our associated paper:

@article{klen2023,
  title = {Numerical simulations of atmospheric quantum channels},
  author = {Klen, M. and Semenov, A. A.},
  journal = {Phys. Rev. A},
  volume = {108},
  issue = {3},
  pages = {033718},
  numpages = {19},
  year = {2023},
  month = {Sep},
  publisher = {American Physical Society},
  doi = {10.1103/PhysRevA.108.033718},
  url = {https://link.aps.org/doi/10.1103/PhysRevA.108.033718}
}

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. Feel free to open new issues if you have any questions.

License

GNU GPLv3

Releases

No releases published

Packages

No packages published