From d002e0329fe084f06adae33390126fc44b3cf11f Mon Sep 17 00:00:00 2001 From: Xavier Andrade Date: Sat, 14 Dec 2024 12:17:30 -0800 Subject: [PATCH] - Updated pseudopod for a better implementation of the spherical harmonics. - The new version renames sharmonic to sharmonic_real. --- external_libs/pseudopod | 2 +- src/hamiltonian/projector.hpp | 4 ++-- src/hamiltonian/projector_fourier.hpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/external_libs/pseudopod b/external_libs/pseudopod index 4ea6627a..8aa6a94c 160000 --- a/external_libs/pseudopod +++ b/external_libs/pseudopod @@ -1 +1 @@ -Subproject commit 4ea6627a04b1f96128c98097ab8e176fd5872a1c +Subproject commit 8aa6a94ca2c40ccb9bff82d626ffc3635d4af7b0 diff --git a/src/hamiltonian/projector.hpp b/src/hamiltonian/projector.hpp index bb5874db..bac5bd87 100644 --- a/src/hamiltonian/projector.hpp +++ b/src/hamiltonian/projector.hpp @@ -46,7 +46,7 @@ class projector { spline = ps.projector(iproj_l).function(), sph = sphere_.ref(), l, iproj_lm, metric = basis.cell().metric()] GPU_LAMBDA (auto ipoint, auto m) { - mat[iproj_lm + m][ipoint] = spline(sph.distance(ipoint))*pseudo::math::sharmonic(l, m - l, metric.to_cartesian(sph.point_pos(ipoint))); + mat[iproj_lm + m][ipoint] = spline(sph.distance(ipoint))*pseudo::math::sharmonic_real(l, m - l, metric.to_cartesian(sph.point_pos(ipoint))); }); } else { @@ -56,7 +56,7 @@ class projector { gpu::run(sphere_.size(), 2*l + 1, [mat = begin(matrix_), spline = ps.projector(iproj_l).function(), sph = sphere_.ref(), l, iproj_lm, dg = double_grid.ref(), spac = basis.rspacing(), metric = basis.cell().metric()] GPU_LAMBDA (auto ipoint, auto m) { - mat[iproj_lm + m][ipoint] = dg.value([spline, l, m] GPU_LAMBDA(auto pos) { return spline(pos.length())*pseudo::math::sharmonic(l, m - l, pos);}, spac, metric.to_cartesian(sph.point_pos(ipoint))); + mat[iproj_lm + m][ipoint] = dg.value([spline, l, m] GPU_LAMBDA(auto pos) { return spline(pos.length())*pseudo::math::sharmonic_real(l, m - l, pos);}, spac, metric.to_cartesian(sph.point_pos(ipoint))); }); } diff --git a/src/hamiltonian/projector_fourier.hpp b/src/hamiltonian/projector_fourier.hpp index ea831cc4..3696c765 100644 --- a/src/hamiltonian/projector_fourier.hpp +++ b/src/hamiltonian/projector_fourier.hpp @@ -50,7 +50,7 @@ namespace hamiltonian { for(int m = -l; m <= l; m++){ for(int ipoint = 0; ipoint < sphere.size(); ipoint++){ auto point = sphere.ref().grid_point(ipoint); - beta_rs.hypercubic()[point[0]][point[1]][point[2]][iproj_lm] = ps.projector(iproj_l).function()(sphere.ref().distance(ipoint))*pseudo::math::sharmonic(l, m, sphere.ref().point_pos(ipoint)); + beta_rs.hypercubic()[point[0]][point[1]][point[2]][iproj_lm] = ps.projector(iproj_l).function()(sphere.ref().distance(ipoint))*pseudo::math::sharmonic_real(l, m, sphere.ref().point_pos(ipoint)); } kb_coeff_[iproj_lm] = ps.kb_coeff(iproj_l);