From: Rene Gassmoeller Date: Tue, 8 Jun 2021 20:14:53 +0000 (-0400) Subject: Do not use Particle class in ParticleHandler X-Git-Tag: v9.4.0-rc1~1249^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f2f1037550da0e253564e1056ab209b04726c861;p=dealii.git Do not use Particle class in ParticleHandler --- diff --git a/include/deal.II/particles/particle_handler.h b/include/deal.II/particles/particle_handler.h index 4cc8088af2..8744486a09 100644 --- a/include/deal.II/particles/particle_handler.h +++ b/include/deal.II/particles/particle_handler.h @@ -823,6 +823,17 @@ namespace Particles mutable Signals signals; private: + /** + * Insert a particle into the collection of particles from a raw + * data pointer. This function is used for shipping particles + * during serialization and refinement and not intended for use outside + * of this class. Return an iterator to the new position of the particle. + */ + particle_iterator + insert_particle( + const void *& data, + const typename Triangulation::active_cell_iterator &cell); + /** * Address of the triangulation to work on. */ diff --git a/source/particles/particle_handler.cc b/source/particles/particle_handler.cc index ebab1fa080..75afa36e30 100644 --- a/source/particles/particle_handler.cc +++ b/source/particles/particle_handler.cc @@ -49,43 +49,6 @@ namespace Particles return buffer; } - - - - template - std::vector> - unpack_particles( - const boost::iterator_range::const_iterator> - & data_range, - PropertyPool &property_pool) - { - std::vector> particles; - - if (data_range.empty()) - return particles; - - Particle particle; - particle.set_property_pool(property_pool); - const unsigned int particle_size = particle.serialized_size_in_bytes(); - - particles.reserve(data_range.size() / particle_size); - - const void *data = static_cast(&(*data_range.begin())); - - while (data < &(*data_range.end())) - { - particles.emplace_back(data, &property_pool); - } - - Assert( - data == &(*data_range.end()), - ExcMessage( - "The particle data could not be deserialized successfully. " - "Check that when deserializing the particles you expect the same " - "number of properties that were serialized.")); - - return particles; - } } // namespace template @@ -511,6 +474,34 @@ namespace Particles + template + typename ParticleHandler::particle_iterator + ParticleHandler::insert_particle( + const void *& data, + const typename Triangulation::active_cell_iterator &cell) + { + Assert(triangulation != nullptr, ExcInternalError()); + Assert(cell.state() == IteratorState::valid, ExcInternalError()); + + if (particles.size() == 0) + particles.resize(triangulation->n_active_cells()); + + const unsigned int active_cell_index = cell->active_cell_index(); + particles[active_cell_index].push_back(property_pool->register_particle()); + particle_iterator particle_it(particles, + *property_pool, + cell, + particles[active_cell_index].size() - 1); + + data = particle_it->read_particle_data_from_memory(data); + + ++local_number_of_particles; + + return particle_it; + } + + + template void ParticleHandler::insert_particles( @@ -588,14 +579,23 @@ namespace Particles for (unsigned int i = 0; i < cells.size(); ++i) { + const unsigned int active_cell_index = cells[i]->active_cell_index(); + for (unsigned int p = 0; p < local_positions[i].size(); ++p) { - const Particle particle(positions[index_map[i][p]], - local_positions[i][p], - local_start_index + - index_map[i][p]); - - insert_particle(particle, cells[i]); + particles[active_cell_index].push_back( + property_pool->register_particle()); + ++local_number_of_particles; + + particle_iterator particle_it(particles, + *property_pool, + cells[i], + particles[active_cell_index].size() - + 1); + + particle_it->set_location(positions[index_map[i][p]]); + particle_it->set_reference_location(local_positions[i][p]); + particle_it->set_id(local_start_index + index_map[i][p]); } } @@ -784,17 +784,14 @@ namespace Particles } } - - // Create the multimap of local particles - std::multimap::active_cell_iterator, - Particle> - particles; - // Now fill up the actual particles for (unsigned int i_cell = 0; i_cell < local_cells_containing_particles.size(); ++i_cell) { + const unsigned int active_cell_index = + local_cells_containing_particles[i_cell]->active_cell_index(); + for (unsigned int i_particle = 0; i_particle < local_positions[i_cell].size(); ++i_particle) @@ -816,12 +813,20 @@ namespace Particles locally_owned_ids_from_other_processes[calling_process] [index_within_set]; - Particle particle( - local_positions[i_cell][i_particle], - local_reference_positions[i_cell][i_particle], - particle_id); + particles[active_cell_index].push_back( + property_pool->register_particle()); + ++local_number_of_particles; - particle.set_property_pool(get_property_pool()); + particle_iterator particle_it( + particles, + *property_pool, + local_cells_containing_particles[i_cell], + particles[active_cell_index].size() - 1); + + particle_it->set_location(local_positions[i_cell][i_particle]); + particle_it->set_reference_location( + local_reference_positions[i_cell][i_particle]); + particle_it->set_id(particle_id); if (n_global_properties > 0) { @@ -829,15 +834,12 @@ namespace Particles locally_owned_properties_from_other_processes [calling_process][index_within_set]; - particle.set_properties(this_particle_properties); + particle_it->set_properties(this_particle_properties); } - - particles.emplace(local_cells_containing_particles[i_cell], - std::move(particle)); } } - this->insert_particles(particles); + update_cached_numbers(); return original_process_to_local_particle_indices; } @@ -2012,36 +2014,62 @@ namespace Particles const typename Triangulation::CellStatus status, const boost::iterator_range::const_iterator> &data_range) { - // We leave this container non-const to be able to `std::move` - // its contents directly into the particles multimap later. - std::vector> loaded_particles_on_cell = - unpack_particles(data_range, *property_pool); + const auto cell_to_store_particles = + (status != parallel::TriangulationBase::CELL_REFINE) ? + cell : + cell->child(0); + + // deserialize particles and insert into local storage + { + const void *data = static_cast(&(*data_range.begin())); + + while (data < &(*data_range.end())) + insert_particle(data, cell_to_store_particles); + + Assert( + data == &(*data_range.end()), + ExcMessage( + "The particle data could not be deserialized successfully. " + "Check that when deserializing the particles you expect the same " + "number of properties that were serialized.")); + } + auto loaded_particles_on_cell = particles_in_cell(cell_to_store_particles); + + // now update particle storage location and properties if necessary switch (status) { case parallel::TriangulationBase::CELL_PERSIST: { - for (const auto &particle : loaded_particles_on_cell) - insert_particle(particle, cell); + // all particles are correctly inserted } break; case parallel::TriangulationBase::CELL_COARSEN: { + // all particles are in correct cell, but their reference location + // has changed for (auto &particle : loaded_particles_on_cell) { const Point p_unit = - mapping->transform_real_to_unit_cell(cell, + mapping->transform_real_to_unit_cell(cell_to_store_particles, particle.get_location()); particle.set_reference_location(p_unit); - insert_particle(particle, cell); } } break; case parallel::TriangulationBase::CELL_REFINE: { - for (auto &particle : loaded_particles_on_cell) + // we need to find the correct child to store the particles and + // their reference location has changed + const unsigned int stored_index = + cell_to_store_particles->active_cell_index(); + + // Cannot use range-based loop, because number of particles in cell + // is going to change + auto particle = loaded_particles_on_cell.begin(); + for (unsigned int i = 0; i < particles[stored_index].size();) { for (unsigned int child_index = 0; child_index < GeometryInfo::max_children_per_cell; @@ -2054,13 +2082,29 @@ namespace Particles { const Point p_unit = mapping->transform_real_to_unit_cell( - child, particle.get_location()); + child, particle->get_location()); if (GeometryInfo::is_inside_unit_cell(p_unit)) { - particle.set_reference_location(p_unit); - // Use std::multimap::emplace_hint to speed up - // insertion of particles. - insert_particle(particle, child); + particle->set_reference_location(p_unit); + + // if the particle is not in child 0, we stored the + // handle in the wrong place; move the handle and + // redo the loop; otherwise move on to next particle + if (child_index != 0) + { + particles[child->active_cell_index()].push_back( + particles[stored_index][i]); + + particles[stored_index][i] = + particles[stored_index].back(); + particles[stored_index].resize( + particles[stored_index].size() - 1); + } + else + { + ++i; + ++particle; + } break; } } diff --git a/tests/particles/particle_handler_05.with_p4est=true.mpirun=1.output b/tests/particles/particle_handler_05.with_p4est=true.mpirun=1.output index 8d814ba577..72233a88a1 100644 --- a/tests/particles/particle_handler_05.with_p4est=true.mpirun=1.output +++ b/tests/particles/particle_handler_05.with_p4est=true.mpirun=1.output @@ -10,19 +10,19 @@ DEAL:0:2d/2d::Before refinement particle id 7 is in cell 0.0 DEAL:0:2d/2d::Before refinement particle id 8 is in cell 0.0 DEAL:0:2d/2d::After refinement particle id 0 is in cell 1.0 DEAL:0:2d/2d::After refinement particle id 1 is in cell 1.0 -DEAL:0:2d/2d::After refinement particle id 3 is in cell 1.0 DEAL:0:2d/2d::After refinement particle id 4 is in cell 1.0 -DEAL:0:2d/2d::After refinement particle id 6 is in cell 1.1 +DEAL:0:2d/2d::After refinement particle id 3 is in cell 1.0 DEAL:0:2d/2d::After refinement particle id 7 is in cell 1.1 +DEAL:0:2d/2d::After refinement particle id 6 is in cell 1.1 DEAL:0:2d/2d::After refinement particle id 2 is in cell 1.2 DEAL:0:2d/2d::After refinement particle id 5 is in cell 1.2 DEAL:0:2d/2d::After refinement particle id 8 is in cell 1.3 DEAL:0:2d/2d::After coarsening particle id 0 is in cell 0.0 DEAL:0:2d/2d::After coarsening particle id 1 is in cell 0.0 -DEAL:0:2d/2d::After coarsening particle id 3 is in cell 0.0 DEAL:0:2d/2d::After coarsening particle id 4 is in cell 0.0 -DEAL:0:2d/2d::After coarsening particle id 6 is in cell 0.0 +DEAL:0:2d/2d::After coarsening particle id 3 is in cell 0.0 DEAL:0:2d/2d::After coarsening particle id 7 is in cell 0.0 +DEAL:0:2d/2d::After coarsening particle id 6 is in cell 0.0 DEAL:0:2d/2d::After coarsening particle id 2 is in cell 0.0 DEAL:0:2d/2d::After coarsening particle id 5 is in cell 0.0 DEAL:0:2d/2d::After coarsening particle id 8 is in cell 0.0 @@ -38,19 +38,19 @@ DEAL:0:2d/3d::Before refinement particle id 7 is in cell 0.0 DEAL:0:2d/3d::Before refinement particle id 8 is in cell 0.0 DEAL:0:2d/3d::After refinement particle id 0 is in cell 1.0 DEAL:0:2d/3d::After refinement particle id 1 is in cell 1.0 -DEAL:0:2d/3d::After refinement particle id 3 is in cell 1.0 DEAL:0:2d/3d::After refinement particle id 4 is in cell 1.0 -DEAL:0:2d/3d::After refinement particle id 6 is in cell 1.1 +DEAL:0:2d/3d::After refinement particle id 3 is in cell 1.0 DEAL:0:2d/3d::After refinement particle id 7 is in cell 1.1 +DEAL:0:2d/3d::After refinement particle id 6 is in cell 1.1 DEAL:0:2d/3d::After refinement particle id 2 is in cell 1.2 DEAL:0:2d/3d::After refinement particle id 5 is in cell 1.2 DEAL:0:2d/3d::After refinement particle id 8 is in cell 1.3 DEAL:0:2d/3d::After coarsening particle id 0 is in cell 0.0 DEAL:0:2d/3d::After coarsening particle id 1 is in cell 0.0 -DEAL:0:2d/3d::After coarsening particle id 3 is in cell 0.0 DEAL:0:2d/3d::After coarsening particle id 4 is in cell 0.0 -DEAL:0:2d/3d::After coarsening particle id 6 is in cell 0.0 +DEAL:0:2d/3d::After coarsening particle id 3 is in cell 0.0 DEAL:0:2d/3d::After coarsening particle id 7 is in cell 0.0 +DEAL:0:2d/3d::After coarsening particle id 6 is in cell 0.0 DEAL:0:2d/3d::After coarsening particle id 2 is in cell 0.0 DEAL:0:2d/3d::After coarsening particle id 5 is in cell 0.0 DEAL:0:2d/3d::After coarsening particle id 8 is in cell 0.0 @@ -88,52 +88,52 @@ DEAL:0:3d/3d::After refinement particle id 2 is in cell 1.0 DEAL:0:3d/3d::After refinement particle id 3 is in cell 1.0 DEAL:0:3d/3d::After refinement particle id 4 is in cell 1.0 DEAL:0:3d/3d::After refinement particle id 5 is in cell 1.0 +DEAL:0:3d/3d::After refinement particle id 14 is in cell 1.0 +DEAL:0:3d/3d::After refinement particle id 13 is in cell 1.0 +DEAL:0:3d/3d::After refinement particle id 12 is in cell 1.0 DEAL:0:3d/3d::After refinement particle id 9 is in cell 1.0 DEAL:0:3d/3d::After refinement particle id 10 is in cell 1.0 DEAL:0:3d/3d::After refinement particle id 11 is in cell 1.0 -DEAL:0:3d/3d::After refinement particle id 12 is in cell 1.0 -DEAL:0:3d/3d::After refinement particle id 13 is in cell 1.0 -DEAL:0:3d/3d::After refinement particle id 14 is in cell 1.0 -DEAL:0:3d/3d::After refinement particle id 18 is in cell 1.1 -DEAL:0:3d/3d::After refinement particle id 19 is in cell 1.1 -DEAL:0:3d/3d::After refinement particle id 20 is in cell 1.1 -DEAL:0:3d/3d::After refinement particle id 21 is in cell 1.1 -DEAL:0:3d/3d::After refinement particle id 22 is in cell 1.1 DEAL:0:3d/3d::After refinement particle id 23 is in cell 1.1 +DEAL:0:3d/3d::After refinement particle id 22 is in cell 1.1 +DEAL:0:3d/3d::After refinement particle id 21 is in cell 1.1 +DEAL:0:3d/3d::After refinement particle id 20 is in cell 1.1 +DEAL:0:3d/3d::After refinement particle id 19 is in cell 1.1 +DEAL:0:3d/3d::After refinement particle id 18 is in cell 1.1 DEAL:0:3d/3d::After refinement particle id 6 is in cell 1.6 +DEAL:0:3d/3d::After refinement particle id 17 is in cell 1.6 +DEAL:0:3d/3d::After refinement particle id 16 is in cell 1.6 +DEAL:0:3d/3d::After refinement particle id 15 is in cell 1.6 DEAL:0:3d/3d::After refinement particle id 7 is in cell 1.6 DEAL:0:3d/3d::After refinement particle id 8 is in cell 1.6 -DEAL:0:3d/3d::After refinement particle id 15 is in cell 1.6 -DEAL:0:3d/3d::After refinement particle id 16 is in cell 1.6 -DEAL:0:3d/3d::After refinement particle id 17 is in cell 1.6 -DEAL:0:3d/3d::After refinement particle id 24 is in cell 1.7 -DEAL:0:3d/3d::After refinement particle id 25 is in cell 1.7 DEAL:0:3d/3d::After refinement particle id 26 is in cell 1.7 +DEAL:0:3d/3d::After refinement particle id 25 is in cell 1.7 +DEAL:0:3d/3d::After refinement particle id 24 is in cell 1.7 DEAL:0:3d/3d::After coarsening particle id 0 is in cell 0.0 DEAL:0:3d/3d::After coarsening particle id 1 is in cell 0.0 DEAL:0:3d/3d::After coarsening particle id 2 is in cell 0.0 DEAL:0:3d/3d::After coarsening particle id 3 is in cell 0.0 DEAL:0:3d/3d::After coarsening particle id 4 is in cell 0.0 DEAL:0:3d/3d::After coarsening particle id 5 is in cell 0.0 +DEAL:0:3d/3d::After coarsening particle id 14 is in cell 0.0 +DEAL:0:3d/3d::After coarsening particle id 13 is in cell 0.0 +DEAL:0:3d/3d::After coarsening particle id 12 is in cell 0.0 DEAL:0:3d/3d::After coarsening particle id 9 is in cell 0.0 DEAL:0:3d/3d::After coarsening particle id 10 is in cell 0.0 DEAL:0:3d/3d::After coarsening particle id 11 is in cell 0.0 -DEAL:0:3d/3d::After coarsening particle id 12 is in cell 0.0 -DEAL:0:3d/3d::After coarsening particle id 13 is in cell 0.0 -DEAL:0:3d/3d::After coarsening particle id 14 is in cell 0.0 -DEAL:0:3d/3d::After coarsening particle id 18 is in cell 0.0 -DEAL:0:3d/3d::After coarsening particle id 19 is in cell 0.0 -DEAL:0:3d/3d::After coarsening particle id 20 is in cell 0.0 -DEAL:0:3d/3d::After coarsening particle id 21 is in cell 0.0 -DEAL:0:3d/3d::After coarsening particle id 22 is in cell 0.0 DEAL:0:3d/3d::After coarsening particle id 23 is in cell 0.0 +DEAL:0:3d/3d::After coarsening particle id 22 is in cell 0.0 +DEAL:0:3d/3d::After coarsening particle id 21 is in cell 0.0 +DEAL:0:3d/3d::After coarsening particle id 20 is in cell 0.0 +DEAL:0:3d/3d::After coarsening particle id 19 is in cell 0.0 +DEAL:0:3d/3d::After coarsening particle id 18 is in cell 0.0 DEAL:0:3d/3d::After coarsening particle id 6 is in cell 0.0 +DEAL:0:3d/3d::After coarsening particle id 17 is in cell 0.0 +DEAL:0:3d/3d::After coarsening particle id 16 is in cell 0.0 +DEAL:0:3d/3d::After coarsening particle id 15 is in cell 0.0 DEAL:0:3d/3d::After coarsening particle id 7 is in cell 0.0 DEAL:0:3d/3d::After coarsening particle id 8 is in cell 0.0 -DEAL:0:3d/3d::After coarsening particle id 15 is in cell 0.0 -DEAL:0:3d/3d::After coarsening particle id 16 is in cell 0.0 -DEAL:0:3d/3d::After coarsening particle id 17 is in cell 0.0 -DEAL:0:3d/3d::After coarsening particle id 24 is in cell 0.0 -DEAL:0:3d/3d::After coarsening particle id 25 is in cell 0.0 DEAL:0:3d/3d::After coarsening particle id 26 is in cell 0.0 +DEAL:0:3d/3d::After coarsening particle id 25 is in cell 0.0 +DEAL:0:3d/3d::After coarsening particle id 24 is in cell 0.0 DEAL:0:3d/3d::OK diff --git a/tests/particles/particle_handler_08.with_p4est=true.mpirun=1.output b/tests/particles/particle_handler_08.with_p4est=true.mpirun=1.output index f54a16d67e..5f0e949a01 100644 --- a/tests/particles/particle_handler_08.with_p4est=true.mpirun=1.output +++ b/tests/particles/particle_handler_08.with_p4est=true.mpirun=1.output @@ -10,19 +10,19 @@ DEAL:0:2d/2d::Before refinement particle id 7 has first property 1.00000 and sec DEAL:0:2d/2d::Before refinement particle id 8 has first property 1.00000 and second property 1.00000 DEAL:0:2d/2d::After refinement particle id 0 has first property 0.00000 and second property 0.00000 DEAL:0:2d/2d::After refinement particle id 1 has first property 0.00000 and second property 0.500000 -DEAL:0:2d/2d::After refinement particle id 3 has first property 0.500000 and second property 0.00000 DEAL:0:2d/2d::After refinement particle id 4 has first property 0.500000 and second property 0.500000 -DEAL:0:2d/2d::After refinement particle id 6 has first property 1.00000 and second property 0.00000 +DEAL:0:2d/2d::After refinement particle id 3 has first property 0.500000 and second property 0.00000 DEAL:0:2d/2d::After refinement particle id 7 has first property 1.00000 and second property 0.500000 +DEAL:0:2d/2d::After refinement particle id 6 has first property 1.00000 and second property 0.00000 DEAL:0:2d/2d::After refinement particle id 2 has first property 0.00000 and second property 1.00000 DEAL:0:2d/2d::After refinement particle id 5 has first property 0.500000 and second property 1.00000 DEAL:0:2d/2d::After refinement particle id 8 has first property 1.00000 and second property 1.00000 DEAL:0:2d/2d::After coarsening particle id 0 has first property 0.00000 and second property 0.00000 DEAL:0:2d/2d::After coarsening particle id 1 has first property 0.00000 and second property 0.500000 -DEAL:0:2d/2d::After coarsening particle id 3 has first property 0.500000 and second property 0.00000 DEAL:0:2d/2d::After coarsening particle id 4 has first property 0.500000 and second property 0.500000 -DEAL:0:2d/2d::After coarsening particle id 6 has first property 1.00000 and second property 0.00000 +DEAL:0:2d/2d::After coarsening particle id 3 has first property 0.500000 and second property 0.00000 DEAL:0:2d/2d::After coarsening particle id 7 has first property 1.00000 and second property 0.500000 +DEAL:0:2d/2d::After coarsening particle id 6 has first property 1.00000 and second property 0.00000 DEAL:0:2d/2d::After coarsening particle id 2 has first property 0.00000 and second property 1.00000 DEAL:0:2d/2d::After coarsening particle id 5 has first property 0.500000 and second property 1.00000 DEAL:0:2d/2d::After coarsening particle id 8 has first property 1.00000 and second property 1.00000 @@ -38,19 +38,19 @@ DEAL:0:2d/3d::Before refinement particle id 7 has first property 1.00000 and sec DEAL:0:2d/3d::Before refinement particle id 8 has first property 1.00000 and second property 1.00000 DEAL:0:2d/3d::After refinement particle id 0 has first property 0.00000 and second property 0.00000 DEAL:0:2d/3d::After refinement particle id 1 has first property 0.00000 and second property 0.500000 -DEAL:0:2d/3d::After refinement particle id 3 has first property 0.500000 and second property 0.00000 DEAL:0:2d/3d::After refinement particle id 4 has first property 0.500000 and second property 0.500000 -DEAL:0:2d/3d::After refinement particle id 6 has first property 1.00000 and second property 0.00000 +DEAL:0:2d/3d::After refinement particle id 3 has first property 0.500000 and second property 0.00000 DEAL:0:2d/3d::After refinement particle id 7 has first property 1.00000 and second property 0.500000 +DEAL:0:2d/3d::After refinement particle id 6 has first property 1.00000 and second property 0.00000 DEAL:0:2d/3d::After refinement particle id 2 has first property 0.00000 and second property 1.00000 DEAL:0:2d/3d::After refinement particle id 5 has first property 0.500000 and second property 1.00000 DEAL:0:2d/3d::After refinement particle id 8 has first property 1.00000 and second property 1.00000 DEAL:0:2d/3d::After coarsening particle id 0 has first property 0.00000 and second property 0.00000 DEAL:0:2d/3d::After coarsening particle id 1 has first property 0.00000 and second property 0.500000 -DEAL:0:2d/3d::After coarsening particle id 3 has first property 0.500000 and second property 0.00000 DEAL:0:2d/3d::After coarsening particle id 4 has first property 0.500000 and second property 0.500000 -DEAL:0:2d/3d::After coarsening particle id 6 has first property 1.00000 and second property 0.00000 +DEAL:0:2d/3d::After coarsening particle id 3 has first property 0.500000 and second property 0.00000 DEAL:0:2d/3d::After coarsening particle id 7 has first property 1.00000 and second property 0.500000 +DEAL:0:2d/3d::After coarsening particle id 6 has first property 1.00000 and second property 0.00000 DEAL:0:2d/3d::After coarsening particle id 2 has first property 0.00000 and second property 1.00000 DEAL:0:2d/3d::After coarsening particle id 5 has first property 0.500000 and second property 1.00000 DEAL:0:2d/3d::After coarsening particle id 8 has first property 1.00000 and second property 1.00000 @@ -88,52 +88,52 @@ DEAL:0:3d/3d::After refinement particle id 2 has first property 0.00000 and seco DEAL:0:3d/3d::After refinement particle id 3 has first property 0.00000 and second property 0.500000 DEAL:0:3d/3d::After refinement particle id 4 has first property 0.00000 and second property 0.500000 DEAL:0:3d/3d::After refinement particle id 5 has first property 0.00000 and second property 0.500000 +DEAL:0:3d/3d::After refinement particle id 14 has first property 0.500000 and second property 0.500000 +DEAL:0:3d/3d::After refinement particle id 13 has first property 0.500000 and second property 0.500000 +DEAL:0:3d/3d::After refinement particle id 12 has first property 0.500000 and second property 0.500000 DEAL:0:3d/3d::After refinement particle id 9 has first property 0.500000 and second property 0.00000 DEAL:0:3d/3d::After refinement particle id 10 has first property 0.500000 and second property 0.00000 DEAL:0:3d/3d::After refinement particle id 11 has first property 0.500000 and second property 0.00000 -DEAL:0:3d/3d::After refinement particle id 12 has first property 0.500000 and second property 0.500000 -DEAL:0:3d/3d::After refinement particle id 13 has first property 0.500000 and second property 0.500000 -DEAL:0:3d/3d::After refinement particle id 14 has first property 0.500000 and second property 0.500000 -DEAL:0:3d/3d::After refinement particle id 18 has first property 1.00000 and second property 0.00000 -DEAL:0:3d/3d::After refinement particle id 19 has first property 1.00000 and second property 0.00000 -DEAL:0:3d/3d::After refinement particle id 20 has first property 1.00000 and second property 0.00000 -DEAL:0:3d/3d::After refinement particle id 21 has first property 1.00000 and second property 0.500000 -DEAL:0:3d/3d::After refinement particle id 22 has first property 1.00000 and second property 0.500000 DEAL:0:3d/3d::After refinement particle id 23 has first property 1.00000 and second property 0.500000 +DEAL:0:3d/3d::After refinement particle id 22 has first property 1.00000 and second property 0.500000 +DEAL:0:3d/3d::After refinement particle id 21 has first property 1.00000 and second property 0.500000 +DEAL:0:3d/3d::After refinement particle id 20 has first property 1.00000 and second property 0.00000 +DEAL:0:3d/3d::After refinement particle id 19 has first property 1.00000 and second property 0.00000 +DEAL:0:3d/3d::After refinement particle id 18 has first property 1.00000 and second property 0.00000 DEAL:0:3d/3d::After refinement particle id 6 has first property 0.00000 and second property 1.00000 +DEAL:0:3d/3d::After refinement particle id 17 has first property 0.500000 and second property 1.00000 +DEAL:0:3d/3d::After refinement particle id 16 has first property 0.500000 and second property 1.00000 +DEAL:0:3d/3d::After refinement particle id 15 has first property 0.500000 and second property 1.00000 DEAL:0:3d/3d::After refinement particle id 7 has first property 0.00000 and second property 1.00000 DEAL:0:3d/3d::After refinement particle id 8 has first property 0.00000 and second property 1.00000 -DEAL:0:3d/3d::After refinement particle id 15 has first property 0.500000 and second property 1.00000 -DEAL:0:3d/3d::After refinement particle id 16 has first property 0.500000 and second property 1.00000 -DEAL:0:3d/3d::After refinement particle id 17 has first property 0.500000 and second property 1.00000 -DEAL:0:3d/3d::After refinement particle id 24 has first property 1.00000 and second property 1.00000 -DEAL:0:3d/3d::After refinement particle id 25 has first property 1.00000 and second property 1.00000 DEAL:0:3d/3d::After refinement particle id 26 has first property 1.00000 and second property 1.00000 +DEAL:0:3d/3d::After refinement particle id 25 has first property 1.00000 and second property 1.00000 +DEAL:0:3d/3d::After refinement particle id 24 has first property 1.00000 and second property 1.00000 DEAL:0:3d/3d::After coarsening particle id 0 has first property 0.00000 and second property 0.00000 DEAL:0:3d/3d::After coarsening particle id 1 has first property 0.00000 and second property 0.00000 DEAL:0:3d/3d::After coarsening particle id 2 has first property 0.00000 and second property 0.00000 DEAL:0:3d/3d::After coarsening particle id 3 has first property 0.00000 and second property 0.500000 DEAL:0:3d/3d::After coarsening particle id 4 has first property 0.00000 and second property 0.500000 DEAL:0:3d/3d::After coarsening particle id 5 has first property 0.00000 and second property 0.500000 +DEAL:0:3d/3d::After coarsening particle id 14 has first property 0.500000 and second property 0.500000 +DEAL:0:3d/3d::After coarsening particle id 13 has first property 0.500000 and second property 0.500000 +DEAL:0:3d/3d::After coarsening particle id 12 has first property 0.500000 and second property 0.500000 DEAL:0:3d/3d::After coarsening particle id 9 has first property 0.500000 and second property 0.00000 DEAL:0:3d/3d::After coarsening particle id 10 has first property 0.500000 and second property 0.00000 DEAL:0:3d/3d::After coarsening particle id 11 has first property 0.500000 and second property 0.00000 -DEAL:0:3d/3d::After coarsening particle id 12 has first property 0.500000 and second property 0.500000 -DEAL:0:3d/3d::After coarsening particle id 13 has first property 0.500000 and second property 0.500000 -DEAL:0:3d/3d::After coarsening particle id 14 has first property 0.500000 and second property 0.500000 -DEAL:0:3d/3d::After coarsening particle id 18 has first property 1.00000 and second property 0.00000 -DEAL:0:3d/3d::After coarsening particle id 19 has first property 1.00000 and second property 0.00000 -DEAL:0:3d/3d::After coarsening particle id 20 has first property 1.00000 and second property 0.00000 -DEAL:0:3d/3d::After coarsening particle id 21 has first property 1.00000 and second property 0.500000 -DEAL:0:3d/3d::After coarsening particle id 22 has first property 1.00000 and second property 0.500000 DEAL:0:3d/3d::After coarsening particle id 23 has first property 1.00000 and second property 0.500000 +DEAL:0:3d/3d::After coarsening particle id 22 has first property 1.00000 and second property 0.500000 +DEAL:0:3d/3d::After coarsening particle id 21 has first property 1.00000 and second property 0.500000 +DEAL:0:3d/3d::After coarsening particle id 20 has first property 1.00000 and second property 0.00000 +DEAL:0:3d/3d::After coarsening particle id 19 has first property 1.00000 and second property 0.00000 +DEAL:0:3d/3d::After coarsening particle id 18 has first property 1.00000 and second property 0.00000 DEAL:0:3d/3d::After coarsening particle id 6 has first property 0.00000 and second property 1.00000 +DEAL:0:3d/3d::After coarsening particle id 17 has first property 0.500000 and second property 1.00000 +DEAL:0:3d/3d::After coarsening particle id 16 has first property 0.500000 and second property 1.00000 +DEAL:0:3d/3d::After coarsening particle id 15 has first property 0.500000 and second property 1.00000 DEAL:0:3d/3d::After coarsening particle id 7 has first property 0.00000 and second property 1.00000 DEAL:0:3d/3d::After coarsening particle id 8 has first property 0.00000 and second property 1.00000 -DEAL:0:3d/3d::After coarsening particle id 15 has first property 0.500000 and second property 1.00000 -DEAL:0:3d/3d::After coarsening particle id 16 has first property 0.500000 and second property 1.00000 -DEAL:0:3d/3d::After coarsening particle id 17 has first property 0.500000 and second property 1.00000 -DEAL:0:3d/3d::After coarsening particle id 24 has first property 1.00000 and second property 1.00000 -DEAL:0:3d/3d::After coarsening particle id 25 has first property 1.00000 and second property 1.00000 DEAL:0:3d/3d::After coarsening particle id 26 has first property 1.00000 and second property 1.00000 +DEAL:0:3d/3d::After coarsening particle id 25 has first property 1.00000 and second property 1.00000 +DEAL:0:3d/3d::After coarsening particle id 24 has first property 1.00000 and second property 1.00000 DEAL:0:3d/3d::OK