blob: 5eef947144302e5b98236b74120c2a67334e5192 [file] [log] [blame]
/// \file
/// Write simulation information in YAML format.
///
/// Information regarding platform, run parameters, performance, etc.,
/// are written to a file whose name is generated from the CoMDVariant
/// and the time of the run. This provides a simple mechanism to track
/// and compare performance etc.
///
/// There are much more sophisticated libraries and routines available
/// to handle YAML, but this simple implemenation handles everything we
/// really need.
#include "yamlOutput.h"
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "CoMD_info.h"
#include "mytype.h"
#include "parallel.h"
FILE* yamlFile = NULL;
static const char* CoMDVersion = "1.1";
static const char* CoMDVariant = CoMD_VARIANT;
static void getTimeString(char* timestring)
{
#ifndef PRINT_TIMING
*timestring = '\0';
return;
#endif
time_t rawtime;
struct tm* timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
sprintf(timestring,
"%4d-%02i-%02d, %02d:%02d:%02d",
timeinfo->tm_year+1900,
timeinfo->tm_mon+1,
timeinfo->tm_mday,
timeinfo->tm_hour,
timeinfo->tm_min,
timeinfo->tm_sec);
}
void yamlBegin(void)
{
if (! printRank())
return;
char filename[64];
time_t rawtime;
time (&rawtime);
struct tm* ptm = localtime(&rawtime);
char sdate[25];
//use tm_mon+1 because tm_mon is 0 .. 11 instead of 1 .. 12
sprintf (sdate,"%04d:%02d:%02d-%02d:%02d:%02d",
ptm->tm_year + 1900, ptm->tm_mon+1,
ptm->tm_mday, ptm->tm_hour, ptm->tm_min,ptm->tm_sec);
sprintf(filename, "%s.%s.yaml", CoMDVariant, sdate);
yamlFile = fopen(filename, "w");
}
void yamlAppInfo(FILE* file)
{
if (! printRank())
return;
printSeparator(file);
fprintf(file,"Mini-Application Name : %s\n", CoMDVariant);
fprintf(file,"Mini-Application Version : %s\n", CoMDVersion);
fprintf(file,"Platform:\n");
fprintf(file," hostname: %s\n", CoMD_HOSTNAME);
fprintf(file," kernel name: %s\n", CoMD_KERNEL_NAME);
fprintf(file," kernel release: %s\n", CoMD_KERNEL_RELEASE);
fprintf(file," processor: %s\n", CoMD_PROCESSOR);
fprintf(file,"Build:\n");
fprintf(file," CC: %s\n", CoMD_COMPILER);
fprintf(file," compiler version: %s\n", CoMD_COMPILER_VERSION);
fprintf(file," CFLAGS: %s\n", CoMD_CFLAGS);
fprintf(file," LDFLAGS: %s\n", CoMD_LDFLAGS);
fprintf(file," using MPI: %s\n", builtWithMpi() ? "true":"false");
fprintf(file," Threading: none\n");
fprintf(file," Double Precision: %s\n", (sizeof(real_t)==sizeof(double)?"true":"false"));
char timestring[32];
getTimeString(timestring);
fprintf(file,"Run Date/Time: %s\n", timestring);
fprintf(file, "\n");
fflush(file);
}
void yamlEnd(void)
{
if (! printRank())
return;
fclose(yamlFile);
}
void printSeparator(FILE* file)
{
//fprintf(file,"=========================================================================\n");
fprintf(file,"\n");
}