From ceadb04cf36eaceb632b98650da102c81722209b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 29 Aug 2023 23:31:24 -0400 Subject: [PATCH] store the actual file name *after* it is written --- src/dump_image.cpp | 11 +++++++---- src/library.cpp | 7 +++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/dump_image.cpp b/src/dump_image.cpp index 033e89861a..a20f33eca3 100644 --- a/src/dump_image.cpp +++ b/src/dump_image.cpp @@ -475,6 +475,7 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : DumpImage::~DumpImage() { delete image; + output->thermo->set_image_fname(""); delete[] diamtype; delete[] diamelement; @@ -500,10 +501,6 @@ void DumpImage::init_style() DumpCustom::init_style(); - // cache dump image filename pattern for access through library interface. - - if (multifile) output->thermo->set_image_fname(filename); - // for grid output, find current ptr for compute or fix // check that fix frequency is acceptable @@ -790,6 +787,12 @@ void DumpImage::write() if (multifile) { fclose(fp); fp = nullptr; + + // cache last dump image filename for access through library interface. + // update only *after* the file has been written so there will be no invalid read. + // have to recreate the substitution done within openfile(). + + output->thermo->set_image_fname(utils::star_subst(filename, update->ntimestep, padflag)); } } } diff --git a/src/library.cpp b/src/library.cpp index 7d4533deb6..727729800c 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -822,6 +822,10 @@ argument string. - line number (0-based) of current line in current file or buffer - pointer to int - no + * - imagename + - file name of the last :doc:`dump image ` file written + - pointer to 0-terminated const char array + - no * - step - timestep when the last thermo output was generated or -1 - pointer to bigint @@ -866,6 +870,9 @@ void *lammps_last_thermo(void *handle, const char *what, int index) } else if (strcmp(what, "line") == 0) { val = (void *) th->get_line(); + } else if (strcmp(what, "imagename") == 0) { + val = (void *) th->get_image_fname(); + } else if (strcmp(what, "step") == 0) { val = (void *) th->get_timestep();