From ac0e2f570a6f73b149633b26fb3e3b74bc06f32f Mon Sep 17 00:00:00 2001 From: Pasquale Africa Date: Fri, 30 Jun 2023 22:41:59 +0000 Subject: [PATCH] Add failing test --- tests/serialization/particle_handler_03.cc | 170 ++++++++++++++++++ ...particle_handler_03.with_p4est=true.output | 103 +++++++++++ 2 files changed, 273 insertions(+) create mode 100644 tests/serialization/particle_handler_03.cc create mode 100644 tests/serialization/particle_handler_03.with_p4est=true.output diff --git a/tests/serialization/particle_handler_03.cc b/tests/serialization/particle_handler_03.cc new file mode 100644 index 0000000000..18584f3c00 --- /dev/null +++ b/tests/serialization/particle_handler_03.cc @@ -0,0 +1,170 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2010 - 2021 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + + +// check and illustrate the serialization process for ParticleHandler + +#include + +#include +#include +#include + +#include + +#include "serialization.h" + +template +void +create_regular_particle_distribution( + Particles::ParticleHandler &particle_handler, + const Triangulation &tr, + const unsigned int particles_per_direction = 3) +{ + for (unsigned int i = 0; i < particles_per_direction; ++i) + for (unsigned int j = 0; j < particles_per_direction; ++j) + { + Point position; + Point reference_position; + unsigned int id = i * particles_per_direction + j; + + position[0] = static_cast(i) / + static_cast(particles_per_direction - 1); + position[1] = static_cast(j) / + static_cast(particles_per_direction - 1); + + if (dim > 2) + for (unsigned int k = 0; k < particles_per_direction; ++k) + { + position[2] = static_cast(j) / + static_cast(particles_per_direction - 1); + id = i * particles_per_direction * particles_per_direction + + j * particles_per_direction + k; + Particles::Particle particle(position, + reference_position, + id); + + typename Triangulation::active_cell_iterator cell = + GridTools::find_active_cell_around_point( + tr, particle.get_location()); + + particle_handler.insert_particle(particle, cell); + } + else + { + Particles::Particle particle(position, + reference_position, + id); + + typename Triangulation::active_cell_iterator cell = + GridTools::find_active_cell_around_point(tr, + particle.get_location()); + + particle_handler.insert_particle(particle, cell); + } + } +} + + + +template +void +test() +{ + Triangulation tr; + GridGenerator::hyper_cube(tr); + tr.refine_global(2); + MappingQ mapping(1); + + Particles::ParticleHandler particle_handler(tr, mapping); + + create_regular_particle_distribution(particle_handler, tr); + particle_handler.sort_particles_into_subdomains_and_cells(); + + for (auto particle = particle_handler.begin(); + particle != particle_handler.end(); + ++particle) + deallog << "Before serialization particle id " << particle->get_id() + << " is in cell " << particle->get_surrounding_cell(tr) + << std::endl; + + // save data to archive + std::ostringstream oss; + { + boost::archive::text_oarchive oa(oss, boost::archive::no_header); + + oa << particle_handler; + // particle_handler.prepare_for_serialization(); + // tr.save("checkpoint"); + + // archive and stream closed when + // destructors are called + } + deallog << oss.str() << std::endl; + + // Now remove all information in tr and particle_handler, + // this is like creating new objects after a restart + tr.clear(); + GridGenerator::hyper_cube(tr); + + particle_handler.clear(); + particle_handler.initialize(tr, mapping); + + // This should not produce any output + for (auto particle = particle_handler.begin(); + particle != particle_handler.end(); + ++particle) + deallog << "In between particle id " << particle->get_id() << " is in cell " + << particle->get_surrounding_cell(tr) << std::endl; + + // verify correctness of the serialization. Note that the deserialization of + // the particle handler has to happen before the triangulation (otherwise it + // does not know if something was stored in the user data of the + // triangulation). + { + std::istringstream iss(oss.str()); + boost::archive::text_iarchive ia(iss, boost::archive::no_header); + + ia >> particle_handler; + // tr.load("checkpoint"); + // particle_handler.deserialize(); + } + + for (auto particle = particle_handler.begin(); + particle != particle_handler.end(); + ++particle) + deallog << "After serialization particle id " << particle->get_id() + << " is in cell " << particle->get_surrounding_cell(tr) + << std::endl; + + deallog << "OK" << std::endl << std::endl; +} + + +int +main(int argc, char *argv[]) +{ + initlog(); + + deallog.push("2d/2d"); + test<2, 2>(); + deallog.pop(); + deallog.push("2d/3d"); + test<2, 3>(); + deallog.pop(); + deallog.push("3d/3d"); + test<3, 3>(); + deallog.pop(); +} diff --git a/tests/serialization/particle_handler_03.with_p4est=true.output b/tests/serialization/particle_handler_03.with_p4est=true.output new file mode 100644 index 0000000000..a97ab8fe8f --- /dev/null +++ b/tests/serialization/particle_handler_03.with_p4est=true.output @@ -0,0 +1,103 @@ + +DEAL:0:2d/2d::Before serialization particle id 0 is in cell 2.0 +DEAL:0:2d/2d::Before serialization particle id 3 is in cell 2.1 +DEAL:0:2d/2d::Before serialization particle id 1 is in cell 2.2 +DEAL:0:2d/2d::Before serialization particle id 4 is in cell 2.3 +DEAL:0:2d/2d::Before serialization particle id 6 is in cell 2.5 +DEAL:0:2d/2d::Before serialization particle id 7 is in cell 2.7 +DEAL:0:2d/2d::Before serialization particle id 2 is in cell 2.10 +DEAL:0:2d/2d::Before serialization particle id 5 is in cell 2.11 +DEAL:0:2d/2d::Before serialization particle id 8 is in cell 2.15 +DEAL:0:2d/2d::0 0 9 1 9 + +DEAL:0:2d/2d::After serialization particle id 0 is in cell 2.0 +DEAL:0:2d/2d::After serialization particle id 3 is in cell 2.1 +DEAL:0:2d/2d::After serialization particle id 1 is in cell 2.2 +DEAL:0:2d/2d::After serialization particle id 4 is in cell 2.3 +DEAL:0:2d/2d::After serialization particle id 6 is in cell 2.5 +DEAL:0:2d/2d::After serialization particle id 7 is in cell 2.7 +DEAL:0:2d/2d::After serialization particle id 2 is in cell 2.10 +DEAL:0:2d/2d::After serialization particle id 5 is in cell 2.11 +DEAL:0:2d/2d::After serialization particle id 8 is in cell 2.15 +DEAL:0:2d/2d::OK +DEAL:0:2d/2d:: +DEAL:0:2d/3d::Before serialization particle id 0 is in cell 2.0 +DEAL:0:2d/3d::Before serialization particle id 3 is in cell 2.1 +DEAL:0:2d/3d::Before serialization particle id 1 is in cell 2.2 +DEAL:0:2d/3d::Before serialization particle id 4 is in cell 2.3 +DEAL:0:2d/3d::Before serialization particle id 6 is in cell 2.5 +DEAL:0:2d/3d::Before serialization particle id 7 is in cell 2.7 +DEAL:0:2d/3d::Before serialization particle id 2 is in cell 2.10 +DEAL:0:2d/3d::Before serialization particle id 5 is in cell 2.11 +DEAL:0:2d/3d::Before serialization particle id 8 is in cell 2.15 +DEAL:0:2d/3d::0 0 9 1 9 + +DEAL:0:2d/3d::After serialization particle id 0 is in cell 2.0 +DEAL:0:2d/3d::After serialization particle id 3 is in cell 2.1 +DEAL:0:2d/3d::After serialization particle id 1 is in cell 2.2 +DEAL:0:2d/3d::After serialization particle id 4 is in cell 2.3 +DEAL:0:2d/3d::After serialization particle id 6 is in cell 2.5 +DEAL:0:2d/3d::After serialization particle id 7 is in cell 2.7 +DEAL:0:2d/3d::After serialization particle id 2 is in cell 2.10 +DEAL:0:2d/3d::After serialization particle id 5 is in cell 2.11 +DEAL:0:2d/3d::After serialization particle id 8 is in cell 2.15 +DEAL:0:2d/3d::OK +DEAL:0:2d/3d:: +DEAL:0:3d/3d::Before serialization particle id 0 is in cell 2.0 +DEAL:0:3d/3d::Before serialization particle id 1 is in cell 2.0 +DEAL:0:3d/3d::Before serialization particle id 2 is in cell 2.0 +DEAL:0:3d/3d::Before serialization particle id 9 is in cell 2.1 +DEAL:0:3d/3d::Before serialization particle id 10 is in cell 2.1 +DEAL:0:3d/3d::Before serialization particle id 11 is in cell 2.1 +DEAL:0:3d/3d::Before serialization particle id 3 is in cell 2.6 +DEAL:0:3d/3d::Before serialization particle id 4 is in cell 2.6 +DEAL:0:3d/3d::Before serialization particle id 5 is in cell 2.6 +DEAL:0:3d/3d::Before serialization particle id 12 is in cell 2.7 +DEAL:0:3d/3d::Before serialization particle id 13 is in cell 2.7 +DEAL:0:3d/3d::Before serialization particle id 14 is in cell 2.7 +DEAL:0:3d/3d::Before serialization particle id 18 is in cell 2.9 +DEAL:0:3d/3d::Before serialization particle id 19 is in cell 2.9 +DEAL:0:3d/3d::Before serialization particle id 20 is in cell 2.9 +DEAL:0:3d/3d::Before serialization particle id 21 is in cell 2.15 +DEAL:0:3d/3d::Before serialization particle id 22 is in cell 2.15 +DEAL:0:3d/3d::Before serialization particle id 23 is in cell 2.15 +DEAL:0:3d/3d::Before serialization particle id 6 is in cell 2.54 +DEAL:0:3d/3d::Before serialization particle id 7 is in cell 2.54 +DEAL:0:3d/3d::Before serialization particle id 8 is in cell 2.54 +DEAL:0:3d/3d::Before serialization particle id 15 is in cell 2.55 +DEAL:0:3d/3d::Before serialization particle id 16 is in cell 2.55 +DEAL:0:3d/3d::Before serialization particle id 17 is in cell 2.55 +DEAL:0:3d/3d::Before serialization particle id 24 is in cell 2.63 +DEAL:0:3d/3d::Before serialization particle id 25 is in cell 2.63 +DEAL:0:3d/3d::Before serialization particle id 26 is in cell 2.63 +DEAL:0:3d/3d::0 0 27 3 27 + +DEAL:0:3d/3d::After serialization particle id 0 is in cell 2.0 +DEAL:0:3d/3d::After serialization particle id 1 is in cell 2.0 +DEAL:0:3d/3d::After serialization particle id 2 is in cell 2.0 +DEAL:0:3d/3d::After serialization particle id 9 is in cell 2.1 +DEAL:0:3d/3d::After serialization particle id 10 is in cell 2.1 +DEAL:0:3d/3d::After serialization particle id 11 is in cell 2.1 +DEAL:0:3d/3d::After serialization particle id 3 is in cell 2.6 +DEAL:0:3d/3d::After serialization particle id 4 is in cell 2.6 +DEAL:0:3d/3d::After serialization particle id 5 is in cell 2.6 +DEAL:0:3d/3d::After serialization particle id 12 is in cell 2.7 +DEAL:0:3d/3d::After serialization particle id 13 is in cell 2.7 +DEAL:0:3d/3d::After serialization particle id 14 is in cell 2.7 +DEAL:0:3d/3d::After serialization particle id 18 is in cell 2.9 +DEAL:0:3d/3d::After serialization particle id 19 is in cell 2.9 +DEAL:0:3d/3d::After serialization particle id 20 is in cell 2.9 +DEAL:0:3d/3d::After serialization particle id 21 is in cell 2.15 +DEAL:0:3d/3d::After serialization particle id 22 is in cell 2.15 +DEAL:0:3d/3d::After serialization particle id 23 is in cell 2.15 +DEAL:0:3d/3d::After serialization particle id 6 is in cell 2.54 +DEAL:0:3d/3d::After serialization particle id 7 is in cell 2.54 +DEAL:0:3d/3d::After serialization particle id 8 is in cell 2.54 +DEAL:0:3d/3d::After serialization particle id 15 is in cell 2.55 +DEAL:0:3d/3d::After serialization particle id 16 is in cell 2.55 +DEAL:0:3d/3d::After serialization particle id 17 is in cell 2.55 +DEAL:0:3d/3d::After serialization particle id 24 is in cell 2.63 +DEAL:0:3d/3d::After serialization particle id 25 is in cell 2.63 +DEAL:0:3d/3d::After serialization particle id 26 is in cell 2.63 +DEAL:0:3d/3d::OK +DEAL:0:3d/3d:: -- 2.39.5