From f24b4121f0e24fe3d7f113e12772a7aa5d18c29e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mos=C3=A8=20Giordano?= Date: Tue, 19 May 2020 19:32:03 +0100 Subject: [PATCH] Use a buffer array to generate the random numbers in gaussian field --- src/TDAC.jl | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/TDAC.jl b/src/TDAC.jl index c07f172b..3daf94a4 100644 --- a/src/TDAC.jl +++ b/src/TDAC.jl @@ -176,8 +176,9 @@ function get_axes(nx::Int, ny::Int, dx::Real, dy::Real) return x,y end -struct RandomField{F<:GaussianRandomField,W<:AbstractArray,Z<:AbstractArray} +struct RandomField{F<:GaussianRandomField,X<:AbstractArray,W<:AbstractArray,Z<:AbstractArray} grf::F + xi::X w::W z::Z end @@ -206,10 +207,11 @@ function init_gaussian_random_field_generator(lambda::T, cov = CovarianceFunction(dim, Matern(lambda, nu, σ = sigma)) grf = GaussianRandomField(cov, CirculantEmbedding(), x, y, minpadding=pad, primes=primes) v = grf.data[1] + xi = Array{eltype(grf.cov)}(undef, size(v)) w = Array{complex(float(eltype(v)))}(undef, size(v)) z = Array{eltype(grf.cov)}(undef, length.(grf.pts)) - return RandomField(grf, w, z) + return RandomField(grf, xi, w, z) end # Get a random sample from gaussian random field grf using random number generator rng @@ -217,7 +219,8 @@ function sample_gaussian_random_field!(field::AbstractMatrix{T}, grf::RandomField, rng::Random.AbstractRNG) where T - sample_gaussian_random_field!(field, grf, randn(rng, size(grf.grf.data[1]))) + @. grf.xi = rand((rng,), T) + sample_gaussian_random_field!(field, grf, grf.xi) end