From a2272122c07012e6dff460c751d1928898506410 Mon Sep 17 00:00:00 2001 From: Nuwan Yapa Date: Thu, 22 Feb 2024 12:39:18 -0500 Subject: [PATCH] Optimize to prevent overflows --- ho_basis.jl | 4 +++- ho_basis_test.jl | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ho_basis.jl b/ho_basis.jl index 1ac682e..d040111 100644 --- a/ho_basis.jl +++ b/ho_basis.jl @@ -2,7 +2,9 @@ using NuclearToolkit using SpecialFunctions # Gaussian potentials in HO space -N_nl(n, l) = (-1)^n * sqrt(1/sqrt(pi) * (1/2)^(l+1) * 2^(n+2*l+3) * factorial(n) / Iterators.prod((2*n+2*l+1):-2:1)) +sqrt_factorial(n) = Iterators.prod(sqrt.(n:-1:1)) +sqrt_double_factorial(n) = Iterators.prod(sqrt.(n:-2:1)) +N_nl(n, l) = (-1)^n * sqrt_factorial(n) * sqrt(1/sqrt(pi) * (1/2)^(l+1) * 2^(n+2*l+3)) / sqrt_double_factorial(2*n+2*l+1) prefactor(n, l, k) = (-1)^k * binomial(n + l + 1/2, n - k) / factorial(k) Talmi(l, R, k1, k2) = (1/2) / (1 + 1/R^2)^(3/2 + l + k1 + k2) * gamma(3/2 + l + k1 + k2) V_Gaussian(R, l, n1, n2) = N_nl(n1, l) * N_nl(n2, l) * sum([prefactor(n1, l, k1) * prefactor(n2, l, k2) * Talmi(l, R, k1, k2) for (k1, k2) in Iterators.product(0:n1, 0:n2)]) diff --git a/ho_basis_test.jl b/ho_basis_test.jl index 95363cb..439f4c9 100644 --- a/ho_basis_test.jl +++ b/ho_basis_test.jl @@ -4,7 +4,7 @@ include("ho_basis.jl") l = 0 V0 = -10 R = 1 -n_max = 10 +n_max = 20 ns = collect(0:n_max) ls = fill(l, n_max + 1)