Quantum 3xplorer (Q3)
An AI-native quantum simulation engine
Loading...
Searching...
No Matches
q3::GVectorsGrid Class Reference

#include <g_vectors_grid.hpp>

+ Inheritance diagram for q3::GVectorsGrid:

Public Member Functions

 GVectorsGrid ()=default
 
int estimate_maximum_plane_waves_per_kpoint (Real energy_cutoff_wavefunction, Real two_pi_over_lattice_parameter_squared) const
 
int first_nonzero_g_index () const
 
const GVector & g_vector (int index) const
 
const std::vector< Real > & g_vector_magnitudes () const
 
int g_vector_to_fft_grid_index (const GVector &g_vector) const
 Compute the FFT grid index for a G-vector from its Miller indices.
 
const std::vector< GVector > & g_vectors () const
 
void generate (const Crystal &crystal_structure, Real energy_cutoff_charge_density, int grid_dimension_1, int grid_dimension_2, int grid_dimension_3, bool is_gamma_only=false, int rank=0, int size=1, int fft_local_start=-1, int fft_local_dimension_1=-1)
 
int global_number_of_g_vectors () const
 
int grid_dimension_1 () const
 
bool is_gamma_only () const
 
int local_g_vector_start_index () const
 
int local_number_of_g_vectors () const
 
int number_of_g_vectors () const
 
- Public Member Functions inherited from q3::ReciprocalSpaceVectorsGrid
 ReciprocalSpaceVectorsGrid ()=default
 
int number_of_vectors () const
 
const ReciprocalSpaceVector & vector (int index) const
 
const std::vector< ReciprocalSpaceVector > & vectors () const
 
- Public Member Functions inherited from q3::PointsGrid
 PointsGrid ()=default
 
virtual ~PointsGrid ()=default
 
bool empty () const
 
int number_of_points () const
 
const WeightedPoint3D & point (int index) const
 
const std::vector< WeightedPoint3D > & points () const
 

Protected Attributes

int first_nonzero_g_index_ {}
 
std::vector< Real > g_vector_magnitudes_
 
std::vector< GVector > g_vectors_
 
int global_number_of_g_vectors_ {0}
 
int grid_dimension_1_ {}
 
int grid_dimension_2_ {}
 
int grid_dimension_3_ {}
 
bool is_gamma_only_ {false}
 
int local_count_ {0}
 
int local_start_ {0}
 
- Protected Attributes inherited from q3::ReciprocalSpaceVectorsGrid
std::vector< ReciprocalSpaceVector > vectors_
 
- Protected Attributes inherited from q3::PointsGrid
std::vector< WeightedPoint3D > points_
 

Detailed Description

Definition at line 19 of file g_vectors_grid.hpp.

Constructor & Destructor Documentation

◆ GVectorsGrid()

q3::GVectorsGrid::GVectorsGrid ( )
default

Member Function Documentation

◆ estimate_maximum_plane_waves_per_kpoint()

int q3::GVectorsGrid::estimate_maximum_plane_waves_per_kpoint ( Real  energy_cutoff_wavefunction,
Real  two_pi_over_lattice_parameter_squared 
) const
inline

◆ first_nonzero_g_index()

int q3::GVectorsGrid::first_nonzero_g_index ( ) const
inline

◆ g_vector()

const GVector & q3::GVectorsGrid::g_vector ( int  index) const
inline

◆ g_vector_magnitudes()

const std::vector< Real > & q3::GVectorsGrid::g_vector_magnitudes ( ) const
inline

Definition at line 216 of file g_vectors_grid.hpp.

References g_vector_magnitudes_.

Referenced by q3::PlanewaveBasis::g_vector_magnitudes().

◆ g_vector_to_fft_grid_index()

int q3::GVectorsGrid::g_vector_to_fft_grid_index ( const GVector &  g_vector) const
inline

Compute the FFT grid index for a G-vector from its Miller indices.

Definition at line 167 of file g_vectors_grid.hpp.

References g_vector(), grid_dimension_1_, grid_dimension_2_, grid_dimension_3_, q3::GVector::miller, and q3::ReciprocalSpaceVectorsGrid::vector().

◆ g_vectors()

◆ generate()

void q3::GVectorsGrid::generate ( const Crystal &  crystal_structure,
Real  energy_cutoff_charge_density,
int  grid_dimension_1,
int  grid_dimension_2,
int  grid_dimension_3,
bool  is_gamma_only = false,
int  rank = 0,
int  size = 1,
int  fft_local_start = -1,
int  fft_local_dimension_1 = -1 
)
inline

For gamma-only, keep only the positive half-sphere: index_3 > 0, OR index_3 == 0 && index_2 > 0, OR index_3 == 0 && index_2 == 0 && index_1 >= 0 The half itself is dictated: rho(-G) = conj(rho(G)) for a real density, so one of each +/-G pair is redundant, and G = 0 – its own partner – is kept once, which is why the last key above is >= 0 and not > 0. Which half is free, and this is not the one Quantum ESPRESSO keeps: its rule leads on the FIRST Miller index where this one leads on the third, so the two codes hold mirror-image halves. Read the rule above rather than assume the two lists are interchangeable.

SLAB-BASED PARTITIONING: Each rank owns G-vectors that fall into its FFT slabs. This ensures all G-vectors are local when scattering to/from the FFT grid. Note: This replaces index-based partitioning when FFT slab info is provided.

Overwrite global g_vectors_ with local ones. WARNING: This rank now only knows about its local G-vectors. For dot_product and other collectives, this is fine as long as everyone knows it's a partition.

Definition at line 23 of file g_vectors_grid.hpp.

References q3::math::tolerances::energy_cutoff_rounding_tolerance, first_nonzero_g_index_, q3::GVector::g_cart, g_vector(), g_vector_magnitudes_, g_vectors_, global_number_of_g_vectors_, grid_dimension_1(), grid_dimension_1_, grid_dimension_2_, grid_dimension_3_, is_gamma_only(), is_gamma_only_, local_count_, local_start_, q3::GVector::magnitude_squared, q3::GVector::miller, q3::Crystal::reciprocal_lattice_vectors(), q3::Crystal::two_pi_over_lattice_parameter(), q3::Crystal::two_pi_over_lattice_parameter_squared(), q3::ReciprocalSpaceVectorsGrid::vector(), q3::IntegerVector3D::x, and q3::math::tolerances::zero_vector_magnitude_threshold.

Referenced by q3::PlanewaveBasis::generate().

◆ global_number_of_g_vectors()

int q3::GVectorsGrid::global_number_of_g_vectors ( ) const
inline

Total number of G-vectors across all band ranks (before partitioning). Equal to number_of_g_vectors() when band_size == 1.

Definition at line 192 of file g_vectors_grid.hpp.

References global_number_of_g_vectors_.

◆ grid_dimension_1()

int q3::GVectorsGrid::grid_dimension_1 ( ) const
inline

Definition at line 184 of file g_vectors_grid.hpp.

References grid_dimension_1_.

Referenced by generate().

◆ is_gamma_only()

bool q3::GVectorsGrid::is_gamma_only ( ) const
inline

Definition at line 220 of file g_vectors_grid.hpp.

References is_gamma_only_.

Referenced by generate(), and q3::ChargeDensityTransformer::rho_g_to_r().

◆ local_g_vector_start_index()

int q3::GVectorsGrid::local_g_vector_start_index ( ) const
inline

Definition at line 200 of file g_vectors_grid.hpp.

References local_start_.

◆ local_number_of_g_vectors()

int q3::GVectorsGrid::local_number_of_g_vectors ( ) const
inline

Definition at line 196 of file g_vectors_grid.hpp.

References local_count_.

◆ number_of_g_vectors()

int q3::GVectorsGrid::number_of_g_vectors ( ) const
inline

Member Data Documentation

◆ first_nonzero_g_index_

int q3::GVectorsGrid::first_nonzero_g_index_ {}
protected

Definition at line 241 of file g_vectors_grid.hpp.

Referenced by first_nonzero_g_index(), and generate().

◆ g_vector_magnitudes_

std::vector<Real> q3::GVectorsGrid::g_vector_magnitudes_
protected

Definition at line 240 of file g_vectors_grid.hpp.

Referenced by g_vector_magnitudes(), and generate().

◆ g_vectors_

std::vector<GVector> q3::GVectorsGrid::g_vectors_
protected

◆ global_number_of_g_vectors_

int q3::GVectorsGrid::global_number_of_g_vectors_ {0}
protected

Definition at line 247 of file g_vectors_grid.hpp.

Referenced by generate(), and global_number_of_g_vectors().

◆ grid_dimension_1_

int q3::GVectorsGrid::grid_dimension_1_ {}
protected

Definition at line 242 of file g_vectors_grid.hpp.

Referenced by g_vector_to_fft_grid_index(), generate(), and grid_dimension_1().

◆ grid_dimension_2_

int q3::GVectorsGrid::grid_dimension_2_ {}
protected

Definition at line 243 of file g_vectors_grid.hpp.

Referenced by g_vector_to_fft_grid_index(), and generate().

◆ grid_dimension_3_

int q3::GVectorsGrid::grid_dimension_3_ {}
protected

Definition at line 244 of file g_vectors_grid.hpp.

Referenced by g_vector_to_fft_grid_index(), and generate().

◆ is_gamma_only_

bool q3::GVectorsGrid::is_gamma_only_ {false}
protected

Definition at line 248 of file g_vectors_grid.hpp.

Referenced by generate(), and is_gamma_only().

◆ local_count_

int q3::GVectorsGrid::local_count_ {0}
protected

Definition at line 246 of file g_vectors_grid.hpp.

Referenced by generate(), and local_number_of_g_vectors().

◆ local_start_

int q3::GVectorsGrid::local_start_ {0}
protected

Definition at line 245 of file g_vectors_grid.hpp.

Referenced by generate(), and local_g_vector_start_index().


The documentation for this class was generated from the following file: