From f4b83b9edab20987d984875f058ddf0867113218 Mon Sep 17 00:00:00 2001 From: Marc Henry de Frahan Date: Wed, 8 Jan 2025 09:40:10 -0700 Subject: [PATCH 1/3] Add a plot header file for sampling particles --- amr-wind/utilities/sampling/Sampling.H | 9 +++++ amr-wind/utilities/sampling/Sampling.cpp | 47 +++++++++++++++++++++++- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/amr-wind/utilities/sampling/Sampling.H b/amr-wind/utilities/sampling/Sampling.H index 0f4e3fa721..b738d97977 100644 --- a/amr-wind/utilities/sampling/Sampling.H +++ b/amr-wind/utilities/sampling/Sampling.H @@ -8,6 +8,7 @@ #include "amr-wind/utilities/PostProcessing.H" #include "amr-wind/utilities/sampling/SamplerBase.H" #include "amr-wind/utilities/sampling/SamplingContainer.H" +#include /** * \defgroup sampling Data-sampling utilities @@ -109,11 +110,19 @@ protected: */ virtual void write_ascii(); + //! Output extra information for certain formats + void write_header_file(const std::string& fname); + //! Output extra information for certain formats void write_info_file(const std::string& fname); SamplingContainer& sampling_container() { return *m_scontainer; } + amrex::Vector int_var_names() + { + return {"uid", "set_id", "probe_id"}; + }; + private: CFDSim& m_sim; diff --git a/amr-wind/utilities/sampling/Sampling.cpp b/amr-wind/utilities/sampling/Sampling.cpp index f99c2a8d8d..c819b78832 100644 --- a/amr-wind/utilities/sampling/Sampling.cpp +++ b/amr-wind/utilities/sampling/Sampling.cpp @@ -390,16 +390,18 @@ void Sampling::impl_write_native() const std::string sampling_name = amrex::Concatenate(m_label, m_sim.time().time_index()); const std::string name(post_dir + "/" + sampling_name); - amrex::Vector int_var_names{"uid", "set_id", "probe_id"}; m_scontainer->WritePlotFile( - name, "particles", m_var_names, int_var_names, + name, "particles", m_var_names, int_var_names(), [=] AMREX_GPU_DEVICE(const SamplingContainer::SuperParticleType& p) { return p.id() > 0; }); const std::string info_name = name + "/sampling_info"; write_info_file(info_name); + + const std::string header_name = name + "/Header"; + write_header_file(header_name); } void Sampling::write_ascii() @@ -443,6 +445,47 @@ void Sampling::write_info_file(const std::string& fname) fh.close(); } +void Sampling::write_header_file(const std::string& fname) +{ + BL_PROFILE("amr-wind::Sampling::write_header_file"); + + // Only I/O processor writes the info file + if (!amrex::ParallelDescriptor::IOProcessor()) { + return; + } + + if (amrex::FileSystem::Exists(fname)) { + return; + } + + if ((m_out_fmt != "native")) { + amrex::Abort( + "write_header_file is implemented only for native formats"); + } + + amrex::VisMF::IO_Buffer io_buffer(amrex::VisMF::IO_Buffer_Size); + std::ofstream hdr; + hdr.rdbuf()->pubsetbuf(io_buffer.dataPtr(), io_buffer.size()); + hdr.open( + fname.c_str(), + std::ofstream::out | std::ofstream::trunc | std::ofstream::binary); + if (!hdr.good()) { + amrex::FileOpenFailed(fname); + } + + const int nlevels = m_sim.repo().num_active_levels(); + const auto& bas = m_sim.mesh().boxArray(); + const auto& geoms = m_sim.mesh().Geom(); + const auto& ref_ratio = m_sim.mesh().refRatio(); + const amrex::Vector level_steps(nlevels, m_sim.time().time_index()); + auto vnames = m_var_names; + const auto inames = int_var_names(); + vnames.insert(vnames.end(), inames.begin(), inames.end()); + amrex::WriteGenericPlotfileHeader( + hdr, nlevels, bas, vnames, geoms, m_sim.time().new_time(), level_steps, + ref_ratio, "HyperCLaw-V1.1", "Level_", "Cell"); +} + void Sampling::prepare_netcdf_file() { #ifdef AMR_WIND_USE_NETCDF From ea7c7aa4c39506eab41695a0c0eeeb243a4b8a61 Mon Sep 17 00:00:00 2001 From: Marc Henry de Frahan Date: Wed, 8 Jan 2025 09:50:57 -0700 Subject: [PATCH 2/3] remove a guard --- amr-wind/utilities/sampling/Sampling.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/amr-wind/utilities/sampling/Sampling.cpp b/amr-wind/utilities/sampling/Sampling.cpp index c819b78832..3cc080bdc9 100644 --- a/amr-wind/utilities/sampling/Sampling.cpp +++ b/amr-wind/utilities/sampling/Sampling.cpp @@ -454,10 +454,6 @@ void Sampling::write_header_file(const std::string& fname) return; } - if (amrex::FileSystem::Exists(fname)) { - return; - } - if ((m_out_fmt != "native")) { amrex::Abort( "write_header_file is implemented only for native formats"); From be2ea864df7f7fed1bd1a448c734bd75bce55f77 Mon Sep 17 00:00:00 2001 From: Marc Henry de Frahan Date: Wed, 8 Jan 2025 10:35:44 -0700 Subject: [PATCH 3/3] static --- amr-wind/utilities/sampling/Sampling.H | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amr-wind/utilities/sampling/Sampling.H b/amr-wind/utilities/sampling/Sampling.H index b738d97977..0e59a0f7f6 100644 --- a/amr-wind/utilities/sampling/Sampling.H +++ b/amr-wind/utilities/sampling/Sampling.H @@ -118,7 +118,7 @@ protected: SamplingContainer& sampling_container() { return *m_scontainer; } - amrex::Vector int_var_names() + static amrex::Vector int_var_names() { return {"uid", "set_id", "probe_id"}; };