diff --git a/Project.toml b/Project.toml index e795c30..c4a8e3d 100644 --- a/Project.toml +++ b/Project.toml @@ -1,17 +1,17 @@ name = "LaserTypes" uuid = "e07c0bfa-524c-4f35-a151-c3dd916fa2f0" -authors = ["Sebastian Micluța-Câmpeanu ", "Petru-Vlad Toma "] version = "0.2.0" +authors = ["Sebastian Micluța-Câmpeanu ", "Petru-Vlad Toma "] [deps] AutoHashEquals = "15f4f7f2-30c1-5605-9d31-71845cf9641f" CoordinateTransformations = "150eb455-5306-5404-9cee-2592286d6298" HypergeometricFunctions = "34004b35-14d8-5ef3-9330-4cdb6864b03a" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -ParallelProcessingTools = "8e8a01fc-6193-5ca1-a2f1-20776dae4199" Parameters = "d96e819e-fc66-5662-9728-84c9c7592b0a" PhysicalConstants = "5ad8b20f-a522-5ce9-bfc9-ddf1d5bda6ab" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" +TaskLocalValues = "ed4db957-447d-4319-bfb6-7fa9ae7ecf34" UnPack = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" UnitfulAtomic = "a7773ee8-282e-5fa2-be4e-bd808c38a91a" @@ -20,10 +20,10 @@ UnitfulAtomic = "a7773ee8-282e-5fa2-be4e-bd808c38a91a" AutoHashEquals = "2.2" CoordinateTransformations = "0.6" HypergeometricFunctions = "0.2, 0.3" -ParallelProcessingTools = "0.4" Parameters = "0.12" PhysicalConstants = "0.2" StaticArrays = "0.12, 1.0" +TaskLocalValues = "0.1.3" UnPack = "1.0" Unitful = "1.0" UnitfulAtomic = "0.3, 1.0" diff --git a/src/LaserTypes.jl b/src/LaserTypes.jl index 5c9f29a..fb824ab 100644 --- a/src/LaserTypes.jl +++ b/src/LaserTypes.jl @@ -14,7 +14,7 @@ using LinearAlgebra using StaticArrays using CoordinateTransformations using AutoHashEquals -using ParallelProcessingTools +using TaskLocalValues using HypergeometricFunctions: _₁F₁, pochhammer import PhysicalConstants.CODATA2018: c_0, e, m_e, ε_0, μ_0 diff --git a/src/gauss.jl b/src/gauss.jl index 5c160cd..2c39157 100644 --- a/src/gauss.jl +++ b/src/gauss.jl @@ -29,14 +29,16 @@ end end function GaussLaserCache(λ, E) - ThreadLocal(GaussLaserCache( - zero(λ), # x - zero(λ), # y - zero(λ), # wz - zero(E*im), # Ex - zero(E*im), # Ey - zero(E*im) # Ez - )) + TaskLocalValue{GaussLaserCache{typeof(zero(λ)),typeof(zero(E*im))}}() do + GaussLaserCache( + zero(λ), # x + zero(λ), # y + zero(λ), # wz + zero(E*im), # Ex + zero(E*im), # Ey + zero(E*im) # Ez + ) + end end function Base.fill!(cache::GaussLaserCache, x::AbstractVector) diff --git a/src/laguerre-gauss.jl b/src/laguerre-gauss.jl index cab9688..97bab60 100644 --- a/src/laguerre-gauss.jl +++ b/src/laguerre-gauss.jl @@ -36,18 +36,20 @@ end end function LaguerreGaussLaserCache(λ, E) - ThreadLocal(LaguerreGaussLaserCache( - zero(λ), # x - zero(λ), # y - zero(λ/λ), # σ - zero(λ), # wz - zero(E*im), # Ex - zero(E*im), # Ey - zero(E*im), # Ez - zero(E*im), # Eg - zero(E*im), # NEgexp - zero(λ/λ), # rwz - )) + TaskLocalValue{LaguerreGaussLaserCache{typeof(zero(λ)),typeof(zero(λ/λ)),typeof(zero(E*im)),typeof(zero(E*im))}}() do + LaguerreGaussLaserCache( + zero(λ), # x + zero(λ), # y + zero(λ/λ), # σ + zero(λ), # wz + zero(E*im), # Ex + zero(E*im), # Ey + zero(E*im), # Ez + zero(E*im), # Eg + zero(E*im), # NEgexp + zero(λ/λ), # rwz + ) + end end @@ -91,21 +93,23 @@ LaguerreGaussLaser struct LaguerreGaussLaser{_P,_M,_MA, C0,Q,M,Eps,Mu,U, IC,W,K,T,Z,E,F, - L,S,CE,EE, + Cache, D,R, C, P, + L, + FF, I} <: AbstractLaser constants::FundamentalConstants{C0,Q,M,Eps,Mu,U} derived::LaguerreGaussLaserConstantCache{IC,W,K,T,Z,E,F} - cache::ThreadLocal{LaguerreGaussLaserCache{L,S,CE,EE}} + cache::Cache geometry::LaserGeometry{D,R} polarization::LaserPolarization{C} profile::P # laser parameters λ::L - a₀::F - ϕ₀::F + a₀::FF + ϕ₀::FF w₀::L p::I m::I @@ -115,30 +119,34 @@ end function LaguerreGaussLaser( constants::FundamentalConstants{C0,Q,M,Eps,Mu,U}, derived::LaguerreGaussLaserConstantCache{IC,W,K,T,Z,E,F}, - cache::ThreadLocal{LaguerreGaussLaserCache{L,S,CE,EE}}, + cache::Cache, geometry::LaserGeometry{D,R}, polarization::LaserPolarization{C}, profile::P, λ::L, - a₀::F, - ϕ₀::F, + a₀::FF, + ϕ₀::FF, w₀::L, p::I, m::I ) where {C0,Q,M,Eps,Mu,U, IC,W,K,T,Z,E,F, - L,S,CE,EE, + Cache, D,R, C, P, + L, + FF, I} LaguerreGaussLaser{Val{p},Val{m},Val{abs(m)}, C0,Q,M,Eps,Mu,U, IC,W,K,T,Z,E,F, - L,S,CE,EE, + Cache, D,R, C, P, + L, + FF, I}( constants, derived,