Skip to content

Commit ed1f4b2

Browse files
author
Fei Yang
committed
make neighbor search initialization cxx11 compatible
1 parent aa64209 commit ed1f4b2

1 file changed

Lines changed: 42 additions & 20 deletions

File tree

source/source_cell/module_neighlist/neighbor_search.cpp

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ struct PeriodicInterval
3434

3535
struct 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

128135
double 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

Comments
 (0)