diff --git a/cpp/field.cpp b/cpp/field.cpp index 3ee9f2995dd1cbc2dea28abdc3d1b675d2cc6031..7d3f0afee6dcf5b8dc0f7aa8bece40aa88a54444 100644 --- a/cpp/field.cpp +++ b/cpp/field.cpp @@ -861,16 +861,20 @@ void field<rnumber, be, fc>::compute_rspace_xincrement_stats( const hid_t group, const std::string dset_name, const hsize_t toffset, - const std::vector<double> max_estimate) + const std::vector<double> max_estimate, + field<rnumber, be, fc> *tmp_field) { TIMEZONE("field::compute_rspace_xincrement_stats"); assert(this->real_space_representation); assert(fc == ONE || fc == THREE); - field<rnumber, be, fc> *tmp_field = new field<rnumber, be, fc>( - this->rlayout->sizes[2], - this->rlayout->sizes[1], - this->rlayout->sizes[0], - this->rlayout->comm); + bool own_field = false; + own_field = (tmp_field == NULL); + if (own_field) + tmp_field = new field<rnumber, be, fc>( + this->rlayout->sizes[2], + this->rlayout->sizes[1], + this->rlayout->sizes[0], + this->rlayout->comm); tmp_field->real_space_representation = true; this->RLOOP_simd( [&](const ptrdiff_t rindex, @@ -890,7 +894,8 @@ void field<rnumber, be, fc>::compute_rspace_xincrement_stats( dset_name, toffset, max_estimate); - delete tmp_field; + if (own_field) + delete tmp_field; } diff --git a/cpp/field.hpp b/cpp/field.hpp index 0364e8d527a9f4ae8b6c30b7026b10c5245b1038..f352be510fbbf4f980cef7c5c60446b666834d8d 100644 --- a/cpp/field.hpp +++ b/cpp/field.hpp @@ -129,7 +129,8 @@ class field const hid_t group, const std::string dset_name, const hsize_t toffset, - const std::vector<double> max_estimate); + const std::vector<double> max_estimate, + field<rnumber, be, fc> *tmp_field = NULL); void compute_rspace_stats( const hid_t group,