Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 10 additions & 9 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,16 @@ FG_ORANGE = \033[38;5;208m
QUIET ?= @


METADATA_GITHASH = $(shell git describe --always --dirty)
METADATA_USER = $(shell whoami)
METADATA_PLATFORM = $(shell hostname)
METADATA_COMPILER = $(COMP)
METADATA_DATE = $(shell date +%x)
METADATA_TIME = $(shell date +%H:%M:%S)
BUILD_DIR = ${shell pwd}

METADATA_FLAGS = -DMETADATA_GITHASH=\"$(METADATA_GITHASH)\" -DMETADATA_USER=\"$(METADATA_USER)\" -DMETADATA_PLATFORM=\"$(METADATA_PLATFORM)\" -DMETADATA_COMPILER=\"$(METADATA_COMPILER)\" -DMETADATA_DATE=\"$(METADATA_DATE)\" -DMETADATA_TIME=\"$(METADATA_TIME)\" -DBUILD_DIR=\"${BUILD_DIR}\" $(if ${MEME}, -DMEME)
METADATA_GITHASH = $(shell git describe --dirty --long --always)
METADATA_DEVELOPMENT_GITHASH = $(shell git merge-base origin/development HEAD)
METADATA_USER = $(shell whoami)
METADATA_PLATFORM = $(shell hostname)
METADATA_COMPILER = $(COMP)
METADATA_DATE = $(shell date +%x)
METADATA_TIME = $(shell date +%H:%M:%S)
BUILD_DIR = ${shell pwd}

METADATA_FLAGS = -DMETADATA_GITHASH=\"$(METADATA_GITHASH)\" -DMETADATA_DEVELOPMENT_GITHASH=\"$(METADATA_DEVELOPMENT_GITHASH)\" -DMETADATA_USER=\"$(METADATA_USER)\" -DMETADATA_PLATFORM=\"$(METADATA_PLATFORM)\" -DMETADATA_COMPILER=\"$(METADATA_COMPILER)\" -DMETADATA_DATE=\"$(METADATA_DATE)\" -DMETADATA_TIME=\"$(METADATA_TIME)\" -DBUILD_DIR=\"${BUILD_DIR}\" $(if ${MEME}, -DMEME)


CXX_COMPILE_FLAGS += -Winline -Wextra -Wall -Wno-comment -std=c++17 $(METADATA_FLAGS)
Expand Down
13 changes: 11 additions & 2 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -540,15 +540,24 @@ if args.diff:
f2.write("\t-@diff2html -F .diff/{}.diff.html --hwt .simba/diff-template.html --output stdout --style side >/dev/null 2>/dev/null\n".format(postfix))

f.write( f'CXX_COMPILE_FLAGS += -DGIT_DIFF_PATCH_OUTPUT=\\"$(abspath .diff/{format(postfix)}.diff.patch)\\"\n')
f.write( f"DEP_DIFF += .diff/{format(postfix)}.diff.patch\n")
f.write( f'CXX_COMPILE_FLAGS += -DGIT_DEVELOPMENT_DIFF_PATCH_OUTPUT=\\"$(abspath .diff/{format(postfix)}.development-diff.patch)\\"\n')
f.write( f"DEP_DIFF += .diff/{format(postfix)}.diff.patch .diff/{format(postfix)}.development-diff.patch\n")

f2.write(f".diff/{format(postfix)}.diff.patch: .FORCE\n")
f2.write(f"\t@mkdir -p .diff\n")
f2.write(f"\t@rm -rf .diff/{format(postfix)}.diff.patch\n")
f2.write(f"\t@if ! git diff --quiet; then \\\n")
f2.write(f"\t echo '$(B_ON)$(FG_MAGENTA)DIFF$(RESET) ==> $(FG_MAGENTA)$@$(RESET)';\\\n")
f2.write(f"\t fi\n")
f2.write(f"\t$(QUIET)git diff > $@\n")
f2.write(f"\t$(QUIET)git diff --patch --output $@ --minimal --patch-with-stat --full-index --binary --find-copies-harder\n")

f2.write(f".diff/{format(postfix)}.development-diff.patch: .FORCE\n")
f2.write(f"\t@mkdir -p .diff\n")
f2.write(f"\t@rm -rf .diff/{format(postfix)}.development-diff.patch\n")
f2.write(f"\t@if ! git diff --quiet --merge-base origin/development; then \\\n")
f2.write(f"\t echo '$(B_ON)$(FG_MAGENTA)DIFF$(RESET) ==> $(FG_MAGENTA)$@$(RESET)';\\\n")
f2.write(f"\t fi\n")
f2.write(f"\t$(QUIET)git diff --patch --output $@ --minimal --patch-with-stat --full-index --binary --find-copies-harder --merge-base origin/development")

#
# Documentation check
Expand Down
9 changes: 0 additions & 9 deletions src/IO/WriteMetaData.H
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,7 @@
#ifndef IO_WRITEMETADATA_H
#define IO_WRITEMETADATA_H

#include <ostream>
#include <iostream>
#include <string>
#include <ctime>
#include <fstream>
#include <chrono>

#include <AMReX.H>
#include <AMReX_ParallelDescriptor.H>
#include <AMReX_ParmParse.H>

namespace IO
{
Expand Down
202 changes: 114 additions & 88 deletions src/IO/WriteMetaData.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
#include "WriteMetaData.H"
#include <sstream>
#include <chrono>
#include <ctime>
#include <fstream>
#include <functional>
#include "Util/Util.H"
#include <sstream>
#include <string>

#include "AMReX_ParmParse.H"
#include "IO/WriteMetaData.H"
#include "Util/Util.H"
/// \todo We need to update ParmParse so that the FORMATTED input file gets recorded permanently.

namespace IO
Expand All @@ -14,107 +19,128 @@ std::chrono::time_point<std::chrono::system_clock> starttime_cr;
std::time_t starttime = 0;
int percent = -1;

void WriteMetaData(std::string plot_file, Status status, int per)
void WriteMetaData(std::string plot_file, Status status, int per)
{
if (amrex::ParallelDescriptor::IOProcessor())
{
amrex::ParmParse pp;

std::chrono::time_point<std::chrono::system_clock> now_cr = std::chrono::system_clock::now();
std::time_t now = std::chrono::system_clock::to_time_t(now_cr);

if (!starttime)
{
starttime_cr = now_cr;
starttime = now;
}

if (!hash)
{
std::stringstream ss;
pp.dumpTable(ss);
std::string dumptable = ss.str();
hash = std::hash<std::string>{}(dumptable + std::ctime(&starttime));
}

if (per > percent)
percent = per;

std::ofstream metadatafile;
metadatafile.open(plot_file + "/metadata", std::ios_base::out);
metadatafile << "# COMPILATION DETAILS" << std::endl;
metadatafile << "# ===================" << std::endl;
metadatafile << "Git_commit_hash = " << METADATA_GITHASH << std::endl;
metadatafile << "Git_development_commit_hash = " << METADATA_DEVELOPMENT_GITHASH << std::endl;
metadatafile << "AMReX_version = " << amrex::Version() << std::endl;
metadatafile << "Dimension = " << AMREX_SPACEDIM << std::endl;
metadatafile << "User = " << METADATA_USER << std::endl;
metadatafile << "Platform = " << METADATA_PLATFORM << std::endl;
metadatafile << "Compiler = " << METADATA_COMPILER << std::endl;
metadatafile << "Compilation_Date = " << METADATA_DATE << std::endl;
metadatafile << "Compilation_Time = " << METADATA_TIME << std::endl;
metadatafile << std::endl;

metadatafile << "# PARAMETERS" << std::endl;
metadatafile << "# ==========" << std::endl;

pp.dumpTable(metadatafile, true);

metadatafile << "# RUN DETAILS" << std::endl;
metadatafile << "# ===========" << std::endl;
metadatafile << "HASH = " << hash << std::endl;
{
char buffer[80];
std::strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", std::localtime(&starttime));
std::string timefmt(buffer);
metadatafile << "Simulation_start_time = " << timefmt << std::endl;
}
metadatafile << "Number_of_processors = " << amrex::ParallelDescriptor::NProcs() << std::endl;
if (status == Status::Running)
metadatafile << "Status = Running";
else if (status == Status::Complete)
metadatafile << "Status = Complete";
else if (status == Status::Abort)
metadatafile << "Status = Abort";
else if (status == Status::Segfault)
metadatafile << "Status = Segfault";
else if (status == Status::Interrupt)
metadatafile << "Status = Interrupt";

if (percent > 0)
metadatafile << " (" << percent << "%)";
metadatafile << std::endl;

if (status != Status::Running)
{
amrex::ParmParse pp;
char buffer[80];
std::strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", std::localtime(&now));
std::string timefmt(buffer);
metadatafile << "Simulation_end_time = " << timefmt << std::endl;
}

std::chrono::time_point<std::chrono::system_clock> now_cr = std::chrono::system_clock::now();
std::time_t now = std::chrono::system_clock::to_time_t(now_cr);
auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(now_cr - starttime_cr);
metadatafile << "Simulation_run_time = " << (float)milliseconds.count() / 1000.0 << " " << std::endl;

if (!starttime)
#ifdef GIT_DIFF_OUTPUT
{
std::ifstream src(GIT_DIFF_OUTPUT, std::ios::binary);
std::ofstream dst(plot_file + "/diff.html", std::ios::binary);
dst << src.rdbuf();
src.close();
dst.close();
}
#endif
{
std::ifstream src(GIT_DIFF_PATCH_OUTPUT, std::ios::binary);
if (src.is_open())
{
starttime_cr = now_cr;
starttime = now;
}

if (!hash)
{
std::stringstream ss;
pp.dumpTable(ss);
std::string dumptable = ss.str();
hash = std::hash<std::string>{}(dumptable + std::ctime(&starttime));
}

if (per > percent) percent = per;

std::ofstream metadatafile;
metadatafile.open(plot_file+"/metadata",std::ios_base::out);
metadatafile << "# COMPILATION DETAILS" << std::endl;
metadatafile << "# ===================" << std::endl;
metadatafile << "Git_commit_hash = " << METADATA_GITHASH << std::endl;
metadatafile << "AMReX_version = " << amrex::Version() << std::endl;
metadatafile << "Dimension = " << AMREX_SPACEDIM << std::endl;
metadatafile << "User = " << METADATA_USER << std::endl;
metadatafile << "Platform = " << METADATA_PLATFORM << std::endl;
metadatafile << "Compiler = " << METADATA_COMPILER << std::endl;
metadatafile << "Compilation_Date = " << METADATA_DATE << std::endl;
metadatafile << "Compilation_Time = " << METADATA_TIME << std::endl;
metadatafile << std::endl;

metadatafile << "# PARAMETERS" << std::endl;
metadatafile << "# ==========" << std::endl;

pp.dumpTable(metadatafile,true);

metadatafile << "# RUN DETAILS" << std::endl;
metadatafile << "# ===========" << std::endl;
metadatafile << "HASH = " << hash << std::endl;
std::ofstream dst(plot_file + "/diff.patch", std::ios::binary);
dst << src.rdbuf();
src.close();
dst.close();
}
else
{
char buffer [80];
std::strftime(buffer,80,"%Y-%m-%d %H:%M:%S",std::localtime(&starttime));
std::string timefmt(buffer);
metadatafile << "Simulation_start_time = " << timefmt << std::endl;
Util::Warning(INFO, "Could not open ", GIT_DIFF_PATCH_OUTPUT);
}
metadatafile << "Number_of_processors = " << amrex::ParallelDescriptor::NProcs() << std::endl;
if (status == Status::Running) metadatafile << "Status = Running";
else if (status == Status::Complete) metadatafile << "Status = Complete";
else if (status == Status::Abort) metadatafile << "Status = Abort";
else if (status == Status::Segfault) metadatafile << "Status = Segfault";
else if (status == Status::Interrupt) metadatafile << "Status = Interrupt";

if (percent>0) metadatafile << " (" << percent << "%)";
metadatafile << std::endl;

if (status != Status::Running)
{
char buffer[80];
std::strftime(buffer,80,"%Y-%m-%d %H:%M:%S",std::localtime(&now));
std::string timefmt(buffer);
metadatafile << "Simulation_end_time = " << timefmt << std::endl;
}

auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(now_cr - starttime_cr);
metadatafile << "Simulation_run_time = " << (float)milliseconds.count()/1000.0 << " " << std::endl;

#ifdef GIT_DIFF_OUTPUT
}
{
std::ifstream src(GIT_DEVELOPMENT_DIFF_PATCH_OUTPUT, std::ios::binary);
if (src.is_open())
{
std::ifstream src(GIT_DIFF_OUTPUT,std::ios::binary);
std::ofstream dst(plot_file+"/diff.html",std::ios::binary);
std::ofstream dst(plot_file + "/development-diff.patch", std::ios::binary);
dst << src.rdbuf();
src.close();
dst.close();
}
#endif
else
{
std::ifstream src(GIT_DIFF_PATCH_OUTPUT,std::ios::binary);
if (src.is_open())
{
std::ofstream dst(plot_file+"/diff.patch",std::ios::binary);
dst << src.rdbuf();
src.close();
dst.close();
}
else
{
Util::Warning(INFO,"Could not open ",GIT_DIFF_PATCH_OUTPUT);
}

Util::Warning(INFO, "Could not open ", GIT_DEVELOPMENT_DIFF_PATCH_OUTPUT);
}

metadatafile.close();
}

metadatafile.close();
}
}

}
Loading