diff options
Diffstat (limited to 'src/integration.jl')
-rw-r--r-- | src/integration.jl | 50 |
1 files changed, 44 insertions, 6 deletions
diff --git a/src/integration.jl b/src/integration.jl index 9be4641..223d6cc 100644 --- a/src/integration.jl +++ b/src/integration.jl @@ -1,4 +1,4 @@ -## Copyright 2021 Ian Jauslin +## Copyright 2021-2023 Ian Jauslin ## ## Licensed under the Apache License, Version 2.0 (the "License"); ## you may not use this file except in compliance with the License. @@ -13,7 +13,12 @@ ## limitations under the License. # approximate \int_a^b f using Gauss-Legendre quadratures -@everywhere function integrate_legendre(f,a,b,weights) +@everywhere function integrate_legendre( + f::Function, + a::Float64, + b::Float64, + weights::Tuple{Array{Float64,1},Array{Float64,1}} +) out=0 for i in 1:length(weights[1]) out+=(b-a)/2*weights[2][i]*f((b-a)/2*weights[1][i]+(b+a)/2) @@ -21,7 +26,13 @@ return out end # \int f*g where g is sampled at the Legendre nodes -@everywhere function integrate_legendre_sampled(f,g,a,b,weights) +@everywhere function integrate_legendre_sampled( + f::Function, + g::Array{Float64,1}, + a::Float64, + b::Float64, + weights::Tuple{Array{Float64,1},Array{Float64,1}} +) out=0 for i in 1:length(weights[1]) out+=(b-a)/2*weights[2][i]*f((b-a)/2*weights[1][i]+(b+a)/2)*g[i] @@ -31,7 +42,12 @@ end # approximate \int_a^b f/sqrt((b-x)(x-a)) using Gauss-Chebyshev quadratures -@everywhere function integrate_chebyshev(f,a,b,N) +@everywhere function integrate_chebyshev( + f::Function, + a::Float64, + b::Float64, + N::Int64 +) out=0 for i in 1:N out=out+pi/N*f((b-a)/2*cos((2*i-1)/(2*N)*pi)+(b+a)/2) @@ -40,7 +56,11 @@ end end # approximate \int_0^\infty dr f(r)*exp(-a*r) using Gauss-Chebyshev quadratures -@everywhere function integrate_laguerre(f,a,weights_gL) +@everywhere function integrate_laguerre( + f::Function, + a::Float64, + weights_gL::Tuple{Array{Float64,1},Array{Float64,1}} +) out=0. for i in 1:length(weights_gL[1]) out+=1/a*f(weights_gL[1][i]/a)*weights_gL[2][i] @@ -49,10 +69,28 @@ end end # Hann window -@everywhere function hann(x,L) +@everywhere function hann( + x::Float64, + L::Float64 +) if abs(x)<L/2 return cos(pi*x/L)^2 else return 0. end end +# Fourier transform (in 3d) +@everywhere function hann_fourier( + k::Float64, + L::Float64 +) + return L^2*4*pi^3/k*(((k*L)^3-4*k*L*pi^2)*cos(k*L/2)-2*(3*(k*L)^2-4*pi^2)*sin(k*L/2))/((k*L)^3-4*k*L*pi^2)^2 +end + +# normalized Gaussian (in 3d) +@everywhere function gaussian( + k::Float64, + L::Float64 +) + return exp(-k^2/(2*L))/sqrt(8*pi^3*L^3) +end |