Skip to content

Instantly share code, notes, and snippets.

View jwscook's full-sized avatar

James Cook jwscook

View GitHub Profile
@jwscook
jwscook / BesseljComparison.jl
Last active October 17, 2022 20:00
Comparing besselj speed and values between SpecialFunctions.jl and Bessels.jl
using SpecialFunctions, Bessels, LinearAlgebra, Plots
const spj = SpecialFunctions.besselj
const bej = Bessels.besselj
function foo!(A, B, f::T, ns, ms, N) where T
for (j, n) in enumerate(ns)
for (i, m) in enumerate(ms)
A[i, j] = 0
t = @elapsed for _ in 1:N
@jwscook
jwscook / TwoStream.md
Last active November 15, 2022 10:37
Linear theory and computational parameters for simulating the two-stream instability with a PIC code in normalised units.

Two stream instability

Electrostatic linear plasma dispersion relation

$$ 1 + \Sigma_s \frac{\Pi_s^2}{\omega}\int_{-\infty}^{\infty} \frac{\partial f_s(v_\parallel)}{\partial v_\parallel}\frac{v_\parallel}{\omega-k_\parallel v_\parallel} dv_\parallel=0 $$

where, in SI units:

@jwscook
jwscook / UnderstandingLAPACK.jl
Last active March 11, 2024 18:45
Understanding non-allocating factorization methods in scalapack
using LinearAlgebra, Test, Random
Random.seed!(0)
@testset "understand raw lapack calls" begin
@show Threads.nthreads()
@show BLAS.get_num_threads()
m = 5
n = 4
A = rand(m, n);
@jwscook
jwscook / HouseholderQR.jl
Last active March 23, 2024 08:23
Solve a square or least square linear system with the QR householder reflector algorithm
using LinearAlgebra, Random, Base.Threads
Random.seed!(0)
alphafactor(x::Real) = -sign(x)
alphafactor(x::Complex) = -exp(im * angle(x))
function householder!(A::Matrix{T}) where T
m, n = size(A)
H = A
α = zeros(T, min(m, n)) # Diagonal of R
@jwscook
jwscook / DistributedHouseholderQR.jl
Last active March 26, 2024 21:08
Julia code to solve square or least-square linear problems Ax=b via householder QR where A can be an AbstractArray or DistributedArrays DArray and b can be a vector or a SharedArray
using Random, Distributed, Test
Random.seed!(0)
addprocs(4, exeflags="-t 2")
@everywhere begin
using LinearAlgebra, Random
using Distributed, DistributedArrays, SharedArrays
LinearAlgebra.BLAS.set_num_threads(Base.Threads.nthreads())