#include #include #include #include #include #include #include #include #include #include "allvars.h" #include "param.h" #include "densitykernel.h" #include "proto.h" #include "cosmology.h" #include "cooling.h" #include "petaio.h" #include "mymalloc.h" #include "endrun.h" #include "utils-string.h" /*! \file begrun.c * \brief initial set-up of a simulation run * * This file contains various functions to initialize a simulation run. In * particular, the parameterfile is read in and parsed, the initial * conditions or restart files are read, and global variables are initialized * to their proper values. */ static void open_outputfiles(int RestartsnapNum); /*! This function performs the initial set-up of the simulation. First, the * parameterfile is set, then routines for setting units, reading * ICs/restart-files are called, auxialiary memory is allocated, etc. */ void begrun(int BeginFlag, int RestartSnapNum) { /* n is aligned*/ size_t n = All.MaxMemSizePerCore * All.NumThreads * ((size_t) 1024 * 1024); mymalloc_init(n); petaio_init(); init(RestartSnapNum); /* ... read in initial model */ } /*! This function opens various log-files that report on the status and * performance of the simulstion. On restart from restart-files * (start-option 1), the code will append to these files. */ static void open_outputfiles(int RestartSnapNum) { char mode[2]; char * buf; char * postfix; strcpy(mode, "a+"); if(RestartSnapNum != -1) { postfix = fastpm_strdup_printf("-R%03d", RestartSnapNum); } else { postfix = fastpm_strdup_printf("%s", ""); } if(ThisTask != 0) { /* only the root processors writes to the log files */ free(postfix); return; } buf = fastpm_strdup_printf("%s/%s%s", All.OutputDir, All.CpuFile, postfix); fastpm_path_ensure_dirname(buf); if(!(FdCPU = fopen(buf, mode))) endrun(1, "error in opening file '%s'\n", buf); free(buf); buf = fastpm_strdup_printf("%s/%s%s", All.OutputDir, All.EnergyFile, postfix); fastpm_path_ensure_dirname(buf); if(!(FdEnergy = fopen(buf, mode))) endrun(1, "error in opening file '%s'\n", buf); free(buf); #ifdef SFR buf = fastpm_strdup_printf("%s/%s%s", All.OutputDir, "sfr.txt", postfix); fastpm_path_ensure_dirname(buf); if(!(FdSfr = fopen(buf, mode))) endrun(1, "error in opening file '%s'\n", buf); free(buf); #endif #ifdef BLACK_HOLES buf = fastpm_strdup_printf("%s/%s%s", All.OutputDir, "blackholes.txt", postfix); fastpm_path_ensure_dirname(buf); if(!(FdBlackHoles = fopen(buf, mode))) endrun(1, "error in opening file '%s'\n", buf); free(buf); #endif } /*! This function closes the global log-files. */ void close_outputfiles(void) { if(ThisTask != 0) /* only the root processors writes to the log files */ return; fclose(FdCPU); fclose(FdEnergy); #ifdef SFR fclose(FdSfr); #endif #ifdef BLACK_HOLES fclose(FdBlackHoles); #endif }