@@ -34,6 +34,11 @@ struct PeriodicInterval
3434
3535struct FractionalDomain
3636{
37+ FractionalDomain (const std::array<double , 3 >& lo_in, const std::array<double , 3 >& hi_in)
38+ : lo(lo_in), hi(hi_in)
39+ {
40+ }
41+
3742 std::array<double , 3 > lo;
3843 std::array<double , 3 > hi;
3944};
@@ -101,7 +106,7 @@ std::vector<PeriodicInterval> split_periodic_interval(double lo, double hi)
101106 const double local_hi = std::min (1.0 , hi - shift);
102107 if (local_lo < local_hi)
103108 {
104- intervals.push_back ({ local_lo, local_hi, shift} );
109+ intervals.push_back (PeriodicInterval ( local_lo, local_hi, shift) );
105110 }
106111 }
107112 return intervals;
@@ -123,6 +128,8 @@ bool inside_block(const OriginalAtom& atom,
123128}
124129} // namespace
125130
131+ constexpr double NeighborSearch::coord_tolerance;
132+
126133// ========== Getter methods ==========
127134
128135double NeighborSearch::get_search_radius () const {
@@ -426,27 +433,41 @@ void NeighborSearch::set_local_member_variables_by_halo(const AtomProvider& ucel
426433 const double volume = std::abs (dot_product (a1, a2xa3));
427434 assert (volume > coord_tolerance);
428435
429- const std::array<double , 3 > heights = {
436+ const std::array<double , 3 > heights = {{
430437 volume / norm (a2xa3),
431438 volume / norm (a3xa1),
432439 volume / norm (a1xa2)
433- };
440+ }} ;
434441
435- std::array<double , 3 > margin = {
442+ std::array<double , 3 > margin = {{
436443 search_radius_ / heights[0 ] + coord_tolerance,
437444 search_radius_ / heights[1 ] + coord_tolerance,
438445 search_radius_ / heights[2 ] + coord_tolerance
439- };
440-
441- FractionalDomain domain{
442- {static_cast <double >(x_) / nx, static_cast <double >(y_) / ny, static_cast <double >(z_) / nz},
443- {static_cast <double >(x_ + 1 ) / nx, static_cast <double >(y_ + 1 ) / ny, static_cast <double >(z_ + 1 ) / nz}
444- };
445-
446- FractionalDomain halo{
447- {domain.lo [0 ] - margin[0 ], domain.lo [1 ] - margin[1 ], domain.lo [2 ] - margin[2 ]},
448- {domain.hi [0 ] + margin[0 ], domain.hi [1 ] + margin[1 ], domain.hi [2 ] + margin[2 ]}
449- };
446+ }};
447+
448+ const std::array<double , 3 > domain_lo = {{
449+ static_cast <double >(x_) / nx,
450+ static_cast <double >(y_) / ny,
451+ static_cast <double >(z_) / nz
452+ }};
453+ const std::array<double , 3 > domain_hi = {{
454+ static_cast <double >(x_ + 1 ) / nx,
455+ static_cast <double >(y_ + 1 ) / ny,
456+ static_cast <double >(z_ + 1 ) / nz
457+ }};
458+ const FractionalDomain domain (domain_lo, domain_hi);
459+
460+ const std::array<double , 3 > halo_lo = {{
461+ domain.lo [0 ] - margin[0 ],
462+ domain.lo [1 ] - margin[1 ],
463+ domain.lo [2 ] - margin[2 ]
464+ }};
465+ const std::array<double , 3 > halo_hi = {{
466+ domain.hi [0 ] + margin[0 ],
467+ domain.hi [1 ] + margin[1 ],
468+ domain.hi [2 ] + margin[2 ]
469+ }};
470+ const FractionalDomain halo (halo_lo, halo_hi);
450471
451472 std::vector<OriginalAtom> original_atoms;
452473 original_atoms.reserve (ucell.get_natom ());
@@ -456,11 +477,12 @@ void NeighborSearch::set_local_member_variables_by_halo(const AtomProvider& ucel
456477 {
457478 const ModuleBase::Vector3<double > cart = ucell.get_tau (it, ia);
458479 const ModuleBase::Vector3<double > frac = cart * inv_lat;
459- original_atoms.push_back ({
460- {wrap_fractional (frac.x ), wrap_fractional (frac.y ), wrap_fractional (frac.z )},
461- it,
462- ia
463- });
480+ const std::array<double , 3 > wrapped_frac = {{
481+ wrap_fractional (frac.x ),
482+ wrap_fractional (frac.y ),
483+ wrap_fractional (frac.z )
484+ }};
485+ original_atoms.push_back (OriginalAtom (wrapped_frac, it, ia));
464486 }
465487 }
466488
0 commit comments