nothing fancy
This commit is contained in:
1443
src/scgenerator/data/k_silica.txt
Normal file
1443
src/scgenerator/data/k_silica.txt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -11,9 +11,7 @@ reference = [
|
||||
B = [1.03961212, 0.231792344, 1.01046945]
|
||||
C = [6.00069867e-15, 2.00179144e-14, 1.03560653e-10]
|
||||
kind = 1
|
||||
reference = [
|
||||
"SCHOTT Zemax catalog 2017-01-20b (obtained from http://www.schott.com)",
|
||||
]
|
||||
reference = ["SCHOTT Zemax catalog 2017-01-20b (obtained from http://www.schott.com)"]
|
||||
|
||||
[e7.sellmeier]
|
||||
B = [0.0, 7.2e-15, 3e-28]
|
||||
@@ -24,14 +22,7 @@ reference = [
|
||||
]
|
||||
|
||||
[d-zlaf52la.sellmeier]
|
||||
B = [
|
||||
-8.48750283e9,
|
||||
3.1753525,
|
||||
3.71301651e-14,
|
||||
-1.09609062e-27,
|
||||
2.4418582e-40,
|
||||
-8.94583294e-54,
|
||||
]
|
||||
B = [-8.48750283e9, 3.1753525, 3.71301651e-14, -1.09609062e-27, 2.4418582e-40, -8.94583294e-54]
|
||||
C = []
|
||||
kind = 3
|
||||
reference = ["CDGM Zemax catalog 2017-09 (obtained from http://www.cdgmgd.com)"]
|
||||
@@ -42,8 +33,8 @@ reference = ["CDGM Zemax catalog 2017-09 (obtained from http://www.cdgmgd.com)"]
|
||||
|
||||
[air]
|
||||
a = 0.1358
|
||||
b = 3.64e-5
|
||||
atomic_mass = 4.809e-26
|
||||
b = 3.64e-5
|
||||
|
||||
[air.sellmeier]
|
||||
B = [57921050000.0, 1679170000.0]
|
||||
@@ -60,8 +51,8 @@ source = "Pigeon, J. J., Tochitsky, S. Y., Welch, E. C., & Joshi, C. (2016). Mea
|
||||
|
||||
[nitrogen]
|
||||
a = 0.137
|
||||
b = 1.709e-5
|
||||
atomic_mass = 2.3259e-26
|
||||
b = 1.709e-5
|
||||
|
||||
[nitrogen.sellmeier]
|
||||
B = [32431570000.0]
|
||||
@@ -79,10 +70,10 @@ source = "Wahlstrand, J. K., Cheng, Y. H., & Milchberg, H. M. (2012). High field
|
||||
|
||||
[helium]
|
||||
a = 0.00346
|
||||
atomic_mass = 6.646477e-27
|
||||
atomic_number = 2
|
||||
b = 2.38e-5
|
||||
ionization_energy = 3.9393356074281e-18
|
||||
atomic_number = 2
|
||||
atomic_mass = 6.646477e-27
|
||||
|
||||
[helium.sellmeier]
|
||||
B = [2.16463842e-5, 2.10561127e-7, 4.7509272e-5]
|
||||
@@ -117,8 +108,8 @@ n2 = 3.1e-25
|
||||
|
||||
[hydrogen]
|
||||
a = 0.02453
|
||||
b = 2.651e-5
|
||||
atomic_mass = 1.674e-27
|
||||
b = 2.651e-5
|
||||
|
||||
[hydrogen.sellmeier]
|
||||
B = [0.0148956, 0.0049037]
|
||||
@@ -136,10 +127,10 @@ source = "Shelton, D. P., & Rice, J. E. (1994). Measurements and calculations of
|
||||
|
||||
[neon]
|
||||
a = 0.02135
|
||||
atomic_mass = 3.35092e-26
|
||||
atomic_number = 10
|
||||
b = 1.709e-5
|
||||
ionization_energy = 3.45501365359425e-18
|
||||
atomic_number = 10
|
||||
atomic_mass = 3.35092e-26
|
||||
|
||||
[neon.sellmeier]
|
||||
B = [1281450000.0, 22048600000.0]
|
||||
@@ -156,10 +147,10 @@ source = "Wahlstrand, J. K., Cheng, Y. H., & Milchberg, H. M. (2012). High field
|
||||
|
||||
[argon]
|
||||
a = 0.1355
|
||||
atomic_mass = 6.6338e-26
|
||||
atomic_number = 18
|
||||
b = 3.201e-5
|
||||
ionization_energy = 2.5249661793774e-18
|
||||
atomic_number = 18
|
||||
atomic_mass = 6.6338e-26
|
||||
|
||||
[argon.sellmeier]
|
||||
B = [2501410000.0, 500283000.0, 52234300000.0]
|
||||
@@ -214,10 +205,10 @@ source = "Wahlstrand, J. K., Cheng, Y. H., & Milchberg, H. M. (2012). High field
|
||||
|
||||
[krypton]
|
||||
a = 0.2349
|
||||
atomic_mass = 1.3915e-25
|
||||
atomic_number = 36
|
||||
b = 3.978e-5
|
||||
ionization_energy = 2.2429831039374e-18
|
||||
atomic_number = 36
|
||||
atomic_mass = 1.3915e-25
|
||||
|
||||
[krypton.sellmeier]
|
||||
B = [2536370000.0, 2736490000.0, 62080200000.0]
|
||||
@@ -234,10 +225,10 @@ source = "Wahlstrand, J. K., Cheng, Y. H., & Milchberg, H. M. (2012). High field
|
||||
|
||||
[xenon]
|
||||
a = 0.425
|
||||
atomic_mass = 2.18017e-25
|
||||
atomic_number = 54
|
||||
b = 5.105e-5
|
||||
ionization_energy = 1.94342415157935
|
||||
atomic_number = 54
|
||||
atomic_mass = 2.18017e-25
|
||||
|
||||
[xenon.sellmeier]
|
||||
B = [3228690000.0, 3553930000.0, 60676400000.0]
|
||||
@@ -254,8 +245,8 @@ source = "Wahlstrand, J. K., Cheng, Y. H., & Milchberg, H. M. (2012). High field
|
||||
|
||||
[vacuum]
|
||||
a = 0
|
||||
b = 0
|
||||
atomic_mass = 0
|
||||
b = 0
|
||||
|
||||
[vacuum.sellmeier]
|
||||
B = []
|
||||
|
||||
1198
src/scgenerator/data/n_silica.txt
Normal file
1198
src/scgenerator/data/n_silica.txt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -2,12 +2,14 @@
|
||||
series of helper functions
|
||||
"""
|
||||
|
||||
from scgenerator.physics.materials import n_gas_2
|
||||
from scgenerator.physics.fiber import n_eff_marcatili, beta2, beta2_to_D
|
||||
from scgenerator.physics.units import c
|
||||
import numpy as np
|
||||
|
||||
__all__ = ["capillary_dispersion"]
|
||||
from scgenerator.math import all_zeros
|
||||
from scgenerator.physics.fiber import beta2, n_eff_marcatili, n_eff_hasan
|
||||
from scgenerator.physics.materials import n_gas_2
|
||||
from scgenerator.physics.units import c
|
||||
|
||||
__all__ = ["capillary_dispersion", "capillary_zdw", "revolver_dispersion"]
|
||||
|
||||
|
||||
def capillary_dispersion(
|
||||
@@ -43,11 +45,100 @@ def capillary_dispersion(
|
||||
return beta2(w, n)[2:-2]
|
||||
|
||||
|
||||
def extend_axis(wl):
|
||||
dwl_left = wl[1] - wl[0]
|
||||
dwl_right = wl[-1] - wl[-2]
|
||||
wl = np.concatenate(
|
||||
([wl[0] - 2 * dwl_left, wl[0] - dwl_left], wl, [wl[-1] + dwl_right, wl[-1] + 2 * dwl_right])
|
||||
def capillary_zdw(
|
||||
radius: float,
|
||||
gas_name: str,
|
||||
pressure=None,
|
||||
temperature=None,
|
||||
search_range: tuple[float, float] = (200e-9, 3000e-9),
|
||||
) -> np.ndarray:
|
||||
"""find the zero dispersion wavelength of a capilally
|
||||
|
||||
Parameters
|
||||
----------
|
||||
radius : float
|
||||
in mnm
|
||||
gas_name : str
|
||||
gas name (case insensitive)
|
||||
pressure : float, optional
|
||||
pressure in Pa (multiply mbar by 100 to get Pa), by default atm pressure
|
||||
temperature : float, optional
|
||||
temperature in K, by default 20°C
|
||||
search_range : (float, float), optional
|
||||
range of wavelength (in m) in which to search for the ZDW, by default (200e-9, 3000e-9)
|
||||
|
||||
Returns
|
||||
-------
|
||||
np.ndarray
|
||||
array of zero dispersion wavelength(s)
|
||||
"""
|
||||
wl = np.linspace(*search_range[:2], 1024)
|
||||
disp = capillary_dispersion(wl, radius, gas_name, pressure, temperature)
|
||||
return all_zeros(wl, disp)
|
||||
|
||||
|
||||
def revolver_dispersion(
|
||||
wl: np.ndarray,
|
||||
core_radius: float,
|
||||
gas_name: str,
|
||||
capillary_num: int,
|
||||
capillary_thickness: float,
|
||||
capillary_spacing: float,
|
||||
capillary_nested: int = 0,
|
||||
capillary_resonance_strengths: list[float] = None,
|
||||
pressure=None,
|
||||
temperature=None,
|
||||
) -> np.ndarray:
|
||||
"""computes the dispersion (beta2) of a capillary tube
|
||||
|
||||
Parameters
|
||||
----------
|
||||
wl : np.ndarray
|
||||
wavelength in m
|
||||
radius : float
|
||||
core radius in m
|
||||
gas_name : str
|
||||
gas name (case insensitive)
|
||||
pressure : float, optional
|
||||
pressure in Pa (multiply mbar by 100 to get Pa), by default atm pressure
|
||||
temperature : float, optional
|
||||
temperature in K, by default 20°C
|
||||
|
||||
Returns
|
||||
-------
|
||||
np.ndarray
|
||||
D parameter
|
||||
"""
|
||||
capillary_resonance_strengths = capillary_resonance_strengths or []
|
||||
wl = extend_axis(wl)
|
||||
if pressure is None:
|
||||
pressure = 101325
|
||||
if temperature is None:
|
||||
temperature = 293.15
|
||||
n = n_eff_hasan(
|
||||
wl,
|
||||
n_gas_2(wl, gas_name.lower(), pressure, temperature, False),
|
||||
core_radius,
|
||||
capillary_num,
|
||||
capillary_nested,
|
||||
capillary_thickness,
|
||||
capillary_spacing,
|
||||
capillary_resonance_strengths,
|
||||
)
|
||||
w = 2 * np.pi * c / wl
|
||||
return beta2(w, n)[2:-2]
|
||||
|
||||
|
||||
def extend_axis(axis: np.ndarray) -> np.ndarray:
|
||||
"""add 4 values to an array, 2 on each 'side'"""
|
||||
dwl_left = axis[1] - axis[0]
|
||||
dwl_right = axis[-1] - axis[-2]
|
||||
axis = np.concatenate(
|
||||
(
|
||||
[axis[0] - 2 * dwl_left, axis[0] - dwl_left],
|
||||
axis,
|
||||
[axis[-1] + dwl_right, axis[-1] + 2 * dwl_right],
|
||||
)
|
||||
)
|
||||
|
||||
return wl
|
||||
return axis
|
||||
|
||||
@@ -4,15 +4,14 @@ import numpy as np
|
||||
from numpy import e
|
||||
from numpy.fft import fft
|
||||
from numpy.polynomial.chebyshev import Chebyshev, cheb2poly
|
||||
from scgenerator import utils
|
||||
from scgenerator.cache import np_cache
|
||||
from scgenerator.math import argclosest, u_nm
|
||||
from scgenerator.physics import materials as mat
|
||||
from scgenerator.physics import units
|
||||
from scgenerator.physics.units import c, pi
|
||||
from scipy.interpolate import interp1d
|
||||
|
||||
from .. import utils
|
||||
from ..cache import np_cache
|
||||
from ..math import argclosest, u_nm
|
||||
from . import materials as mat
|
||||
from . import units
|
||||
from .units import c, pi
|
||||
|
||||
pipi = 2 * pi
|
||||
T = TypeVar("T")
|
||||
|
||||
@@ -328,7 +327,9 @@ def n_eff_hasan(
|
||||
|
||||
Reference
|
||||
----------
|
||||
Hasan, Md Imran, Nail Akhmediev, and Wonkeun Chang. "Empirical formulae for dispersion and effective mode area in hollow-core antiresonant fibers." Journal of Lightwave Technology 36.18 (2018): 4060-4065.
|
||||
Hasan, Md Imran, Nail Akhmediev, and Wonkeun Chang. "Empirical formulae for dispersion and
|
||||
effective mode area in hollow-core antiresonant fibers." Journal of Lightwave Technology 36.18
|
||||
(2018): 4060-4065.
|
||||
"""
|
||||
u = u_nm(1, 1)
|
||||
alpha = 5e-12
|
||||
@@ -627,7 +628,6 @@ def beta2(w_for_disp: np.ndarray, n_eff: np.ndarray) -> np.ndarray:
|
||||
return np.gradient(np.gradient(beta(w_for_disp, n_eff), w_for_disp), w_for_disp)
|
||||
|
||||
|
||||
|
||||
def frame_velocity(beta1_arr: np.ndarray, w0_ind: int) -> float:
|
||||
return 1.0 / beta1_arr[w0_ind]
|
||||
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import functools
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Any, TypeVar
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .. import utils
|
||||
from ..cache import np_cache
|
||||
from ..logger import get_logger
|
||||
from . import units
|
||||
from .units import NA, c, epsilon0, kB
|
||||
from scgenerator import utils
|
||||
from scgenerator.cache import np_cache
|
||||
from scgenerator.logger import get_logger
|
||||
from scgenerator.physics import units
|
||||
from scgenerator.physics.units import NA, c, epsilon0, kB
|
||||
|
||||
T = TypeVar("T", np.floating, np.ndarray)
|
||||
|
||||
@@ -22,6 +23,21 @@ class Sellmeier:
|
||||
kind: int = 2
|
||||
constant: float = 0
|
||||
|
||||
@classmethod
|
||||
def load(cls, name: str) -> Sellmeier:
|
||||
mat_dico = utils.load_material_dico(name)
|
||||
s = mat_dico.get("sellmeier", {})
|
||||
return cls(
|
||||
**{
|
||||
newk: s.get(k, None)
|
||||
for newk, k in zip(
|
||||
["B", "C", "pressure_ref", "temperature_ref", "kind", "constant"],
|
||||
["B", "C", "P0", "T0", "kind", "const"],
|
||||
)
|
||||
if k in s
|
||||
}
|
||||
)
|
||||
|
||||
def chi(self, wl: T) -> T:
|
||||
"""n^2 - 1"""
|
||||
if isinstance(wl, np.ndarray):
|
||||
|
||||
@@ -14,16 +14,16 @@ from dataclasses import dataclass
|
||||
from functools import cache, lru_cache
|
||||
from pathlib import Path
|
||||
from string import printable as str_printable
|
||||
from typing import Any, Callable, MutableMapping, Sequence, TypeVar, Set, Union
|
||||
from typing import Any, Callable, MutableMapping, Sequence, TypeVar, Union
|
||||
|
||||
import numpy as np
|
||||
import pkg_resources as pkg
|
||||
import tomli
|
||||
import tomli_w
|
||||
|
||||
from .const import PARAM_FN, PARAM_SEPARATOR, SPEC1_FN, Z_FN, ROOT_PARAMETERS
|
||||
from .logger import get_logger
|
||||
from .errors import DuplicateParameterError
|
||||
from scgenerator.const import PARAM_FN, PARAM_SEPARATOR, ROOT_PARAMETERS, SPEC1_FN, Z_FN
|
||||
from scgenerator.errors import DuplicateParameterError
|
||||
from scgenerator.logger import get_logger
|
||||
|
||||
T_ = TypeVar("T_")
|
||||
|
||||
@@ -85,8 +85,8 @@ class Paths:
|
||||
class SubConfig:
|
||||
fixed: dict[str, Any]
|
||||
variable: list[dict[str, list]]
|
||||
fixed_keys: Set[str]
|
||||
variable_keys: Set[str]
|
||||
fixed_keys: set[str]
|
||||
variable_keys: set[str]
|
||||
|
||||
def __init__(self, dico: dict[str, Any]):
|
||||
dico = dico.copy()
|
||||
|
||||
Reference in New Issue
Block a user