32 template<
typename REAL>
33 class NESpaceGridTests
42 template<Val
idSpaceGr
idInput::val
id VALID>
56 {0.000459944, 1.329603408, 1.265030556}, {0.748660329, 1.63420622, 1.393637791},
57 {0.033228526, 1.391869137, 0.654413566}, {1.114198787, 1.654334594, 0.231075822},
58 {1.657151589, 0.883870516, 1.201243939}, {0.97317591, 1.245644974, 0.284564732}};
63 sgi_ = std::make_unique<SpaceGridInput>(
node);
69 rpi_ = std::make_unique<ReferencePointsInput>(node2);
95 sgi_ = std::make_unique<SpaceGridInput>(
node);
101 rpi_ = std::make_unique<ReferencePointsInput>(node2);
132 auto buffer_start = NES::getBufferStart(space_grid);
133 auto buffer_end = NES::getBufferEnd(space_grid);
134 space_grid.write_description(std::cout, std::string(
""));
135 auto& sgi = *(sge.
sgi_);
136 auto& agr = sgi.get_axis_grids();
138 CHECK(NES::getOdu(space_grid)[
id] == agr[
id].odu);
157 auto buffer_start = NES::getBufferStart(space_grid);
158 auto buffer_end = NES::getBufferEnd(space_grid);
159 space_grid.write_description(std::cout, std::string(
""));
160 auto& sgi = *(sge.
sgi_);
161 auto& agr = sgi.get_axis_grids();
163 CHECK(NES::getOdu(space_grid)[
id] == agr[
id].odu);
179 auto buffer_start = NES::getBufferStart(space_grid);
180 auto buffer_end = NES::getBufferEnd(space_grid);
181 space_grid.write_description(std::cout, std::string(
""));
182 auto& sgi = *(sge.
sgi_);
183 auto& agr = sgi.get_axis_grids();
185 CHECK(NES::getOdu(space_grid)[
id] == agr[
id].odu);
197 auto buffer_start = NES::getBufferStart(space_grid);
198 auto buffer_end = NES::getBufferEnd(space_grid);
199 space_grid.write_description(std::cout, std::string(
""));
200 auto& sgi = *(sge.
sgi_);
201 auto& agr = sgi.get_axis_grids();
203 CHECK(NES::getOdu(space_grid)[
id] == agr[
id].odu);
207 CHECK(space_grid.nDomains() == 8000);
209 CHECK(space_grid.getDataVector().size() == 24000);
215 for (
int iv = 0; iv < num_values; ++iv)
216 values(ip, iv) = ip + 0.1 * iv;
222 std::vector<bool> p_outside(8,
false);
226 const auto& grid_data = NES::getData(space_grid);
228 auto tensorAccessor = [](
const auto& grid_data,
int i,
int j,
int k,
int iv) {
229 return grid_data[1200 * i + 60 * j + 3 * k + iv];
232 CHECK(tensorAccessor(grid_data, 10, 17, 9, 0) == Approx(2.0));
233 CHECK(tensorAccessor(grid_data, 10, 17, 9, 1) == Approx(2.1));
234 CHECK(tensorAccessor(grid_data, 10, 17, 9, 2) == Approx(2.2));
235 CHECK(tensorAccessor(grid_data, 12, 15, 7, 0) == Approx(4.0));
236 CHECK(tensorAccessor(grid_data, 12, 15, 7, 1) == Approx(4.1));
237 CHECK(tensorAccessor(grid_data, 12, 15, 7, 2) == Approx(4.2));
238 CHECK(tensorAccessor(grid_data, 12, 16, 11, 0) == Approx(3.0));
239 CHECK(tensorAccessor(grid_data, 12, 16, 11, 1) == Approx(3.1));
240 CHECK(tensorAccessor(grid_data, 12, 16, 11, 2) == Approx(3.2));
241 CHECK(tensorAccessor(grid_data, 13, 11, 15, 0) == Approx(6.0));
242 CHECK(tensorAccessor(grid_data, 13, 11, 15, 1) == Approx(6.1));
243 CHECK(tensorAccessor(grid_data, 13, 11, 15, 2) == Approx(6.2));
244 CHECK(tensorAccessor(grid_data, 14, 13, 13, 0) == Approx(1.0));
245 CHECK(tensorAccessor(grid_data, 14, 13, 13, 1) == Approx(1.2));
246 CHECK(tensorAccessor(grid_data, 14, 13, 13, 2) == Approx(1.4));
247 CHECK(tensorAccessor(grid_data, 15, 11, 10, 0) == Approx(7.0));
248 CHECK(tensorAccessor(grid_data, 15, 11, 10, 1) == Approx(7.1));
249 CHECK(tensorAccessor(grid_data, 15, 11, 10, 2) == Approx(7.2));
250 CHECK(tensorAccessor(grid_data, 17, 12, 9, 0) == Approx(5.0));
251 CHECK(tensorAccessor(grid_data, 17, 12, 9, 1) == Approx(5.1));
252 CHECK(tensorAccessor(grid_data, 17, 12, 9, 2) == Approx(5.2));
257 {-0.5605484247, -0.9578875303, 1.476860642}, {2.585144997, 1.862680197, 3.282609463},
258 {-0.1961335093, 1.111888766, -0.578481257}, {1.794641614, 1.6000278, -0.9474347234},
259 {2.157717228, 0.9254754186, 2.263158321}, {1.883366346, 2.136350632, 3.188981533}};
265 std::vector<bool> p_outside_2(8,
false);
268 CHECK(tensorAccessor(grid_data, 1, 13, 15, 0) == Approx(2.0));
269 CHECK(tensorAccessor(grid_data, 1, 13, 15, 1) == Approx(2.1));
270 CHECK(tensorAccessor(grid_data, 1, 13, 15, 2) == Approx(2.2));
271 CHECK(tensorAccessor(grid_data, 2, 6, 7, 0) == Approx(5.0));
272 CHECK(tensorAccessor(grid_data, 2, 6, 7, 1) == Approx(5.1));
273 CHECK(tensorAccessor(grid_data, 2, 6, 7, 2) == Approx(5.2));
274 CHECK(tensorAccessor(grid_data, 4, 0, 11, 1) == Approx(0.1));
275 CHECK(tensorAccessor(grid_data, 4, 0, 11, 2) == Approx(0.2));
276 CHECK(tensorAccessor(grid_data, 10, 17, 9, 0) == Approx(2.0));
277 CHECK(tensorAccessor(grid_data, 10, 17, 9, 1) == Approx(2.1));
278 CHECK(tensorAccessor(grid_data, 10, 17, 9, 2) == Approx(2.2));
279 CHECK(tensorAccessor(grid_data, 12, 0, 18, 0) == Approx(7.0));
280 CHECK(tensorAccessor(grid_data, 12, 0, 18, 1) == Approx(7.1));
281 CHECK(tensorAccessor(grid_data, 12, 0, 18, 2) == Approx(7.2));
282 CHECK(tensorAccessor(grid_data, 12, 13, 0, 0) == Approx(6.0));
283 CHECK(tensorAccessor(grid_data, 12, 13, 0, 1) == Approx(6.1));
284 CHECK(tensorAccessor(grid_data, 12, 13, 0, 2) == Approx(6.2));
285 CHECK(tensorAccessor(grid_data, 12, 15, 7, 0) == Approx(4.0));
286 CHECK(tensorAccessor(grid_data, 12, 15, 7, 1) == Approx(4.1));
287 CHECK(tensorAccessor(grid_data, 12, 15, 7, 2) == Approx(4.2));
288 CHECK(tensorAccessor(grid_data, 12, 16, 11, 0) == Approx(3.0));
289 CHECK(tensorAccessor(grid_data, 12, 16, 11, 1) == Approx(3.1));
290 CHECK(tensorAccessor(grid_data, 12, 16, 11, 2) == Approx(3.2));
291 CHECK(tensorAccessor(grid_data, 13, 1, 6, 0) == Approx(1.0));
292 CHECK(tensorAccessor(grid_data, 13, 1, 6, 1) == Approx(1.1));
293 CHECK(tensorAccessor(grid_data, 13, 1, 6, 2) == Approx(1.2));
294 CHECK(tensorAccessor(grid_data, 13, 11, 15, 0) == Approx(6.0));
295 CHECK(tensorAccessor(grid_data, 13, 11, 15, 1) == Approx(6.1));
296 CHECK(tensorAccessor(grid_data, 13, 11, 15, 2) == Approx(6.2));
297 CHECK(tensorAccessor(grid_data, 13, 17, 1, 0) == Approx(3.0));
298 CHECK(tensorAccessor(grid_data, 13, 17, 1, 1) == Approx(3.1));
299 CHECK(tensorAccessor(grid_data, 13, 17, 1, 2) == Approx(3.2));
300 CHECK(tensorAccessor(grid_data, 14, 12, 4, 0) == Approx(4.0));
301 CHECK(tensorAccessor(grid_data, 14, 12, 4, 1) == Approx(4.1));
302 CHECK(tensorAccessor(grid_data, 14, 12, 4, 2) == Approx(4.2));
303 CHECK(tensorAccessor(grid_data, 14, 13, 13, 0) == Approx(1.0));
304 CHECK(tensorAccessor(grid_data, 14, 13, 13, 1) == Approx(1.2));
305 CHECK(tensorAccessor(grid_data, 14, 13, 13, 2) == Approx(1.4));
306 CHECK(tensorAccessor(grid_data, 15, 11, 10, 0) == Approx(7.0));
307 CHECK(tensorAccessor(grid_data, 15, 11, 10, 1) == Approx(7.1));
308 CHECK(tensorAccessor(grid_data, 15, 11, 10, 2) == Approx(7.2));
309 CHECK(tensorAccessor(grid_data, 17, 12, 9, 0) == Approx(5.0));
310 CHECK(tensorAccessor(grid_data, 17, 12, 9, 1) == Approx(5.1));
311 CHECK(tensorAccessor(grid_data, 17, 12, 9, 2) == Approx(5.2));
314 TEST_CASE(
"SpaceGrid::Accumulate::outside",
"[estimators]")
323 auto buffer_start = NES::getBufferStart(space_grid);
324 auto buffer_end = NES::getBufferEnd(space_grid);
325 space_grid.write_description(std::cout, std::string(
""));
326 auto& sgi = *(sge.
sgi_);
327 auto& agr = sgi.get_axis_grids();
329 CHECK(NES::getOdu(space_grid)[
id] == agr[
id].odu);
331 CHECK(space_grid.nDomains() == 2000);
332 CHECK(space_grid.getDataVector().size() == 6000);
338 for (
int iv = 0; iv < num_values; ++iv)
339 values(ip, iv) = ip + 0.1 * iv;
345 std::vector<bool> p_outside(8,
false);
358 std::vector<bool> p_outside_2(8,
false);
375 auto buffer_start = NES::getBufferStart(space_grid);
376 auto buffer_end = NES::getBufferEnd(space_grid);
377 space_grid.write_description(std::cout, std::string(
""));
378 auto& sgi = *(sge.
sgi_);
379 auto& agr = sgi.get_axis_grids();
381 CHECK(NES::getOdu(space_grid)[
id] == agr[
id].odu);
389 for (
int iv = 0; iv < num_values; ++iv)
390 values(ip, iv) = ip + 0.1 * iv;
397 sge.
pset_elec_.
R[2] = {1.451870349, 4.381521229, 1.165202269};
399 std::vector<bool> p_outside(8,
false);
414 auto buffer_start = NES::getBufferStart(space_grid);
415 auto buffer_end = NES::getBufferEnd(space_grid);
416 space_grid.write_description(std::cout, std::string(
""));
417 auto& sgi = *(sge.
sgi_);
418 auto& agr = sgi.get_axis_grids();
420 CHECK(NES::getOdu(space_grid)[
id] == agr[
id].odu);
428 for (
int iv = 0; iv < num_values; ++iv)
429 values(ip, iv) = ip + 0.1 * iv;
435 std::vector<bool> p_outside(8,
false);
439 std::string test_file{
"spacegrid_test.hdf"};
443 std::vector<ObservableHelper> h5desc;
444 space_grid.registerGrid(hd, 0);
446 space_grid.write(hd);
451 bool okay_read = hd.
open(test_file);
452 hd.
push(
"spacegrid1");
457 auto tensorAccessor = [](
const auto& grid_data,
int i,
int j,
int k,
int iv) ->
double {
458 return grid_data.data()[1200 * i + 60 * j + 3 * k + iv];
461 auto value = tensorAccessor(read_values, 10, 17, 9, 0);
463 CHECK(tensorAccessor(read_values, 10, 17, 9, 0) == Approx(2.0));
464 CHECK(tensorAccessor(read_values, 10, 17, 9, 1) == Approx(2.1));
465 CHECK(tensorAccessor(read_values, 10, 17, 9, 2) == Approx(2.2));
466 CHECK(tensorAccessor(read_values, 12, 15, 7, 0) == Approx(4.0));
467 CHECK(tensorAccessor(read_values, 12, 15, 7, 1) == Approx(4.1));
468 CHECK(tensorAccessor(read_values, 12, 15, 7, 2) == Approx(4.2));
469 CHECK(tensorAccessor(read_values, 12, 16, 11, 0) == Approx(3.0));
470 CHECK(tensorAccessor(read_values, 12, 16, 11, 1) == Approx(3.1));
471 CHECK(tensorAccessor(read_values, 12, 16, 11, 2) == Approx(3.2));
472 CHECK(tensorAccessor(read_values, 13, 11, 15, 0) == Approx(6.0));
473 CHECK(tensorAccessor(read_values, 13, 11, 15, 1) == Approx(6.1));
474 CHECK(tensorAccessor(read_values, 13, 11, 15, 2) == Approx(6.2));
475 CHECK(tensorAccessor(read_values, 14, 13, 13, 0) == Approx(1.0));
476 CHECK(tensorAccessor(read_values, 14, 13, 13, 1) == Approx(1.2));
477 CHECK(tensorAccessor(read_values, 14, 13, 13, 2) == Approx(1.4));
478 CHECK(tensorAccessor(read_values, 15, 11, 10, 0) == Approx(7.0));
479 CHECK(tensorAccessor(read_values, 15, 11, 10, 1) == Approx(7.1));
480 CHECK(tensorAccessor(read_values, 15, 11, 10, 2) == Approx(7.2));
481 CHECK(tensorAccessor(read_values, 17, 12, 9, 0) == Approx(5.0));
482 CHECK(tensorAccessor(read_values, 17, 12, 9, 1) == Approx(5.1));
483 CHECK(tensorAccessor(read_values, 17, 12, 9, 2) == Approx(5.2));
class that handles xmlDoc
bool open(const std::filesystem::path &fname, unsigned flags=H5F_ACC_RDWR)
open a file
The operator<< functions provide output for data structures that can be used to directly initialize t...
helper functions for EinsplineSetBuilder
void applyMinimumImage(ParticlePos &pinout) const
if(!okay) throw std xmlNodePtr node
size_t getTotalNum() const
ParticleSetPool particle_pool_
UPtr< SpaceGridInput > sgi_
TEST_CASE("complex_helper", "[type_traits]")
void close()
close all the open groups and file
This should be the minimal ParticleSetPool for integration tests.
SpaceGridEnv(Communicate *comm)
constexpr bool generate_test_data
set to true to generate new random R for particles.
void resize(size_type n, size_type m)
Resize the container.
void update(bool skipSK=false)
update the internal data
Attaches a unit to a Vector for IO.
Communicate * Controller
Global Communicator for a process.
This wrapper is to allow us to leave the user facing operator<< for classes alone.
This is the port of QMCHamiltonian/SpaceGrid to the new Estimator design.
static const auto & getData(const NESpaceGrid< REAL > &nesg)
const DistanceTableAB & getDistTableAB(int table_ID) const
get a distance table by table_ID and dyanmic_cast to DistanceTableAB
Wrapping information on parallelism.
RefVector< ParticleSet > ref_psets_
int addTable(const ParticleSet &psrc, DTModes modes=DTModes::ALL_OFF)
add a distance table
Specialized paritlce class for atomistic simulations.
static auto * getOdu(const NESpaceGrid< REAL > &nesg)
REQUIRE(std::filesystem::exists(filename))
Manage a collection of ParticleSet objects.
std::unique_ptr< T > UPtr
ParticleSetPool particle_pool_
UPtr< SpaceGridInput > sgi_
void push(const std::string &gname, bool createit=true)
push a group to the group stack
std::vector< std::reference_wrapper< T > > RefVector
bool create(const std::filesystem::path &fname, unsigned flags=H5F_ACC_TRUNC)
create a file
static constexpr std::array< std::string_view, NUM_CASES > xml
bool parseFromString(const std::string_view data)
CHECK(log_values[0]==ComplexApprox(std::complex< double >{ 5.603777579195571, -6.1586603331188225 }))
UPtr< ReferencePointsInput > rpi_
SpaceGridEnv(Communicate *comm)
static int getBufferEnd(const NESpaceGrid< REAL > &nesg)
bool readEntry(T &data, const std::string &aname)
read the data from the group aname and return status use read() for inbuilt error checking ...
RefVector< ParticleSet > ref_psets_
UPtr< ReferencePointsInput > rpi_
UPtr< NEReferencePoints > ref_points_
UPtr< NEReferencePoints > ref_points_
static int getBufferStart(const NESpaceGrid< REAL > &nesg)
std::vector< Real > data_