From b3bea8ca9736e87b9c32f36f3b890c9c29df8a4c Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Sun, 19 Nov 2023 05:25:38 -0700 Subject: [PATCH 1/2] Avoid the use of raw pointers. Use std::unique_ptr instead. --- include/aspect/postprocess/visualization.h | 2 +- .../visualization/ISA_rotation_timescale.h | 2 +- .../postprocess/visualization/artificial_viscosity.h | 2 +- .../visualization/artificial_viscosity_composition.h | 2 +- .../postprocess/visualization/boundary_indicator.h | 2 +- .../postprocess/visualization/error_indicator.h | 2 +- .../postprocess/visualization/grain_lag_angle.h | 2 +- .../postprocess/visualization/particle_count.h | 2 +- .../postprocess/visualization/seismic_anomalies.h | 4 ++-- source/postprocess/visualization.cc | 9 ++++----- .../visualization/ISA_rotation_timescale.cc | 6 +++--- .../visualization/artificial_viscosity.cc | 6 +++--- .../artificial_viscosity_composition.cc | 6 +++--- .../postprocess/visualization/boundary_indicator.cc | 6 +++--- source/postprocess/visualization/error_indicator.cc | 6 +++--- source/postprocess/visualization/grain_lag_angle.cc | 6 +++--- source/postprocess/visualization/particle_count.cc | 6 +++--- .../postprocess/visualization/seismic_anomalies.cc | 12 ++++++------ 18 files changed, 41 insertions(+), 42 deletions(-) diff --git a/include/aspect/postprocess/visualization.h b/include/aspect/postprocess/visualization.h index 382ce575e6d..37a14eac501 100644 --- a/include/aspect/postprocess/visualization.h +++ b/include/aspect/postprocess/visualization.h @@ -315,7 +315,7 @@ namespace aspect * to. */ virtual - std::pair *> + std::pair>> execute () const = 0; }; diff --git a/include/aspect/postprocess/visualization/ISA_rotation_timescale.h b/include/aspect/postprocess/visualization/ISA_rotation_timescale.h index fbd7ce9e546..a722ff74558 100644 --- a/include/aspect/postprocess/visualization/ISA_rotation_timescale.h +++ b/include/aspect/postprocess/visualization/ISA_rotation_timescale.h @@ -61,7 +61,7 @@ namespace aspect /** * @copydoc CellDataVectorCreator::execute() */ - std::pair *> + std::pair>> execute() const override; }; diff --git a/include/aspect/postprocess/visualization/artificial_viscosity.h b/include/aspect/postprocess/visualization/artificial_viscosity.h index a4567481ce8..40d088828f1 100644 --- a/include/aspect/postprocess/visualization/artificial_viscosity.h +++ b/include/aspect/postprocess/visualization/artificial_viscosity.h @@ -50,7 +50,7 @@ namespace aspect /** * @copydoc CellDataVectorCreator::execute() */ - std::pair *> + std::pair>> execute () const override; }; } diff --git a/include/aspect/postprocess/visualization/artificial_viscosity_composition.h b/include/aspect/postprocess/visualization/artificial_viscosity_composition.h index 6b1411b3bde..047a2024f53 100644 --- a/include/aspect/postprocess/visualization/artificial_viscosity_composition.h +++ b/include/aspect/postprocess/visualization/artificial_viscosity_composition.h @@ -50,7 +50,7 @@ namespace aspect /** * @copydoc CellDataVectorCreator::execute() */ - std::pair *> + std::pair>> execute () const override; /** diff --git a/include/aspect/postprocess/visualization/boundary_indicator.h b/include/aspect/postprocess/visualization/boundary_indicator.h index a153c42cdfb..7ae400a50c8 100644 --- a/include/aspect/postprocess/visualization/boundary_indicator.h +++ b/include/aspect/postprocess/visualization/boundary_indicator.h @@ -54,7 +54,7 @@ namespace aspect /** * @copydoc CellDataVectorCreator::execute() */ - std::pair *> + std::pair>> execute () const override; }; diff --git a/include/aspect/postprocess/visualization/error_indicator.h b/include/aspect/postprocess/visualization/error_indicator.h index db187aea425..a649ba071b3 100644 --- a/include/aspect/postprocess/visualization/error_indicator.h +++ b/include/aspect/postprocess/visualization/error_indicator.h @@ -49,7 +49,7 @@ namespace aspect /** * @copydoc CellDataVectorCreator::execute() */ - std::pair *> + std::pair>> execute () const override; }; } diff --git a/include/aspect/postprocess/visualization/grain_lag_angle.h b/include/aspect/postprocess/visualization/grain_lag_angle.h index acbd42078c6..61327cc9038 100644 --- a/include/aspect/postprocess/visualization/grain_lag_angle.h +++ b/include/aspect/postprocess/visualization/grain_lag_angle.h @@ -68,7 +68,7 @@ namespace aspect /** * @copydoc CellDataVectorCreator::execute() */ - std::pair *> + std::pair>> execute() const override; }; diff --git a/include/aspect/postprocess/visualization/particle_count.h b/include/aspect/postprocess/visualization/particle_count.h index 4486194ef31..a64a5ae8baf 100644 --- a/include/aspect/postprocess/visualization/particle_count.h +++ b/include/aspect/postprocess/visualization/particle_count.h @@ -54,7 +54,7 @@ namespace aspect /** * @copydoc CellDataVectorCreator::execute() */ - std::pair *> + std::pair>> execute () const override; /** diff --git a/include/aspect/postprocess/visualization/seismic_anomalies.h b/include/aspect/postprocess/visualization/seismic_anomalies.h index a06c272cc22..ac482026cb5 100644 --- a/include/aspect/postprocess/visualization/seismic_anomalies.h +++ b/include/aspect/postprocess/visualization/seismic_anomalies.h @@ -51,7 +51,7 @@ namespace aspect /** * @copydoc CellDataVectorCreator::execute() */ - std::pair *> + std::pair>> execute () const override; /** @@ -111,7 +111,7 @@ namespace aspect /** * @copydoc CellDataVectorCreator::execute() */ - std::pair *> + std::pair>> execute () const override; /** diff --git a/source/postprocess/visualization.cc b/source/postprocess/visualization.cc index fe3804564e9..e287b51b208 100644 --- a/source/postprocess/visualization.cc +++ b/source/postprocess/visualization.cc @@ -871,7 +871,7 @@ namespace aspect (& *p)) { // get the data produced here - const std::pair *> + std::pair>> cell_data = cell_data_creator->execute(); Assert (cell_data.second->size() == this->get_triangulation().n_active_cells(), @@ -884,16 +884,15 @@ namespace aspect visualization_field_names_and_units); // store the pointer, then attach the vector to the DataOut object - cell_data_vectors.push_back (std::unique_ptr> - (cell_data.second)); + cell_data_vectors.push_back (std::move(cell_data.second)); if (dynamic_cast*> (& *p) == nullptr) - data_out.add_data_vector (*cell_data.second, + data_out.add_data_vector (*cell_data_vectors.back(), cell_data.first, DataOut::type_cell_data); else - data_out_faces.add_data_vector (*cell_data.second, + data_out_faces.add_data_vector (*cell_data_vectors.back(), cell_data.first, DataOutFaces::type_cell_data); } diff --git a/source/postprocess/visualization/ISA_rotation_timescale.cc b/source/postprocess/visualization/ISA_rotation_timescale.cc index 49bc2b40687..daa65147d28 100644 --- a/source/postprocess/visualization/ISA_rotation_timescale.cc +++ b/source/postprocess/visualization/ISA_rotation_timescale.cc @@ -43,11 +43,11 @@ namespace aspect template - std::pair *> + std::pair>> ISARotationTimescale::execute() const { - std::pair *> return_value("ISA_rotation_timescale", - new Vector(this->get_triangulation().n_active_cells())); + std::pair>> return_value("ISA_rotation_timescale", + std::make_unique>(this->get_triangulation().n_active_cells())); const QMidpoint quadrature_formula; const unsigned int n_q_points = quadrature_formula.size(); diff --git a/source/postprocess/visualization/artificial_viscosity.cc b/source/postprocess/visualization/artificial_viscosity.cc index c8d61b93f4c..002ec99d336 100644 --- a/source/postprocess/visualization/artificial_viscosity.cc +++ b/source/postprocess/visualization/artificial_viscosity.cc @@ -38,12 +38,12 @@ namespace aspect template - std::pair *> + std::pair>> ArtificialViscosity::execute() const { - std::pair *> + std::pair>> return_value ("artificial_viscosity", - new Vector(this->get_triangulation().n_active_cells())); + std::make_unique>(this->get_triangulation().n_active_cells())); this->get_artificial_viscosity(*return_value.second); // The function we call above sets the artificial viscosity to diff --git a/source/postprocess/visualization/artificial_viscosity_composition.cc b/source/postprocess/visualization/artificial_viscosity_composition.cc index 744eb461708..61ff63decb3 100644 --- a/source/postprocess/visualization/artificial_viscosity_composition.cc +++ b/source/postprocess/visualization/artificial_viscosity_composition.cc @@ -36,16 +36,16 @@ namespace aspect {} template - std::pair *> + std::pair>> ArtificialViscosityComposition::execute() const { Assert(this->n_compositional_fields()>0, ExcMessage ("The artificial viscosity for compositional fields can " "only be calculated if compositional fields are used in the simulation.")); - std::pair *> + std::pair>> return_value ("artificial_viscosity_composition", - new Vector(this->get_triangulation().n_active_cells())); + std::make_unique>(this->get_triangulation().n_active_cells())); this->get_artificial_viscosity_composition(*return_value.second, compositional_field); // The function we call above sets the artificial viscosity to diff --git a/source/postprocess/visualization/boundary_indicator.cc b/source/postprocess/visualization/boundary_indicator.cc index eb02fe81d89..9df7639d16e 100644 --- a/source/postprocess/visualization/boundary_indicator.cc +++ b/source/postprocess/visualization/boundary_indicator.cc @@ -40,12 +40,12 @@ namespace aspect template - std::pair *> + std::pair>> BoundaryIndicator::execute() const { - std::pair *> + std::pair>> return_value ("boundary_indicator", - new Vector(this->get_triangulation().n_active_cells())); + std::make_unique>(this->get_triangulation().n_active_cells())); // retrieve the largest used boundary indicator and add one. // this value will be set for internal cells diff --git a/source/postprocess/visualization/error_indicator.cc b/source/postprocess/visualization/error_indicator.cc index 2553e2ab439..fbbf5a7494e 100644 --- a/source/postprocess/visualization/error_indicator.cc +++ b/source/postprocess/visualization/error_indicator.cc @@ -38,12 +38,12 @@ namespace aspect template - std::pair *> + std::pair>> ErrorIndicator::execute() const { - std::pair *> + std::pair>> return_value ("error_indicator", - new Vector(this->get_triangulation().n_active_cells())); + std::make_unique>(this->get_triangulation().n_active_cells())); this->get_refinement_criteria(*return_value.second); return return_value; diff --git a/source/postprocess/visualization/grain_lag_angle.cc b/source/postprocess/visualization/grain_lag_angle.cc index e471b4867c0..0e3f3b0a98b 100644 --- a/source/postprocess/visualization/grain_lag_angle.cc +++ b/source/postprocess/visualization/grain_lag_angle.cc @@ -43,11 +43,11 @@ namespace aspect template - std::pair *> + std::pair>> GrainLagAngle::execute() const { - std::pair *> return_value("grain_lag_angle", - new Vector(this->get_triangulation().n_active_cells())); + std::pair>> return_value("grain_lag_angle", + std::make_unique>(this->get_triangulation().n_active_cells())); const QMidpoint quadrature_formula; const unsigned int n_q_points = quadrature_formula.size(); // this is 1 for QMidpoint diff --git a/source/postprocess/visualization/particle_count.cc b/source/postprocess/visualization/particle_count.cc index 5f485e6715d..fcbf637335e 100644 --- a/source/postprocess/visualization/particle_count.cc +++ b/source/postprocess/visualization/particle_count.cc @@ -42,7 +42,7 @@ namespace aspect template - std::pair *> + std::pair>> ParticleCount::execute() const { const Postprocess::Particles &particle_postprocessor = @@ -51,9 +51,9 @@ namespace aspect const Particle::ParticleHandler &particle_handler = particle_postprocessor.get_particle_world().get_particle_handler(); - std::pair *> + std::pair>> return_value ("particles_per_cell", - new Vector(this->get_triangulation().n_active_cells())); + std::make_unique>(this->get_triangulation().n_active_cells())); // loop over all of the cells and count particles in them for (const auto &cell : this->get_dof_handler().active_cell_iterators()) diff --git a/source/postprocess/visualization/seismic_anomalies.cc b/source/postprocess/visualization/seismic_anomalies.cc index bec89bf7443..b60be579379 100644 --- a/source/postprocess/visualization/seismic_anomalies.cc +++ b/source/postprocess/visualization/seismic_anomalies.cc @@ -43,12 +43,12 @@ namespace aspect template - std::pair *> + std::pair>> SeismicVsAnomaly::execute() const { - std::pair *> + std::pair>> return_value ("Vs_anomaly", - new Vector(this->get_triangulation().n_active_cells())); + std::make_unique>(this->get_triangulation().n_active_cells())); // Calculate the maximum depth of the domain const double max_depth = this->get_geometry_model().maximal_depth(); @@ -187,12 +187,12 @@ namespace aspect template - std::pair *> + std::pair>> SeismicVpAnomaly::execute() const { - std::pair *> + std::pair>> return_value ("Vp_anomaly", - new Vector(this->get_triangulation().n_active_cells())); + std::make_unique>(this->get_triangulation().n_active_cells())); // Calculate the maximum depth of the domain const double max_depth = this->get_geometry_model().maximal_depth(); From 0b11ce4a77bb7623edede53fd1e90cc9287fb3ba Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Tue, 28 Nov 2023 07:40:20 -0700 Subject: [PATCH 2/2] Add a changelog entry. --- doc/modules/changes/20231128_bangerth | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 doc/modules/changes/20231128_bangerth diff --git a/doc/modules/changes/20231128_bangerth b/doc/modules/changes/20231128_bangerth new file mode 100644 index 00000000000..cf1c4cd1c3c --- /dev/null +++ b/doc/modules/changes/20231128_bangerth @@ -0,0 +1,9 @@ +Changed: The interface +Postprocess::VisualizationPostprocessors::CellDataVectorCreator::execute() +used to return an object of type +`std::pair*>` where the second part is just a +raw pointer. This has been changed (incompatibly) to +`std::pair>>` to avoid the use +of raw pointers and ensure that memory de-allocation happens automatically. +
+(Wolfgang Bangerth, 2023/11/28)