diff --git a/examples/main.c b/examples/main.c index a0cd85c34e72c00253b331d4122959feac0b17d0..24a9412ecc76bb5262b9c402cf86661233d454dd 100644 --- a/examples/main.c +++ b/examples/main.c @@ -92,7 +92,6 @@ void print_help_message() { printf(" %2s %14s %s\n", "-P", "{sec:par:val}", "Set parameter value and overwrites values read from the parameters " "file. Can be used more than once."); - printf(" %2s %14s %s\n", "-r", "", "Continue using restart files."); printf(" %2s %14s %s\n", "-s", "", "Run with hydrodynamics."); printf(" %2s %14s %s\n", "-S", "", "Run with stars."); printf(" %2s %14s %s\n", "-t", "{int}", @@ -162,7 +161,6 @@ int main(int argc, char *argv[]) { int dump_tasks = 0; int dump_threadpool = 0; int nsteps = -2; - int restart = 0; int with_cosmology = 0; int with_external_gravity = 0; int with_sourceterms = 0; @@ -179,12 +177,11 @@ int main(int argc, char *argv[]) { int nparams = 0; char *cmdparams[PARSER_MAX_NO_OF_PARAMS]; char paramFileName[200] = ""; - char restartfile[200] = ""; unsigned long long cpufreq = 0; /* Parse the parameters */ int c; - while ((c = getopt(argc, argv, "acCdDef:FgGhMn:P:rsSt:Tv:y:Y:")) != -1) + while ((c = getopt(argc, argv, "acCdDef:FgGhMn:P:sSt:Tv:y:Y:")) != -1) switch (c) { case 'a': #if defined(HAVE_SETAFFINITY) && defined(HAVE_LIBNUMA) @@ -245,9 +242,6 @@ int main(int argc, char *argv[]) { cmdparams[nparams] = optarg; nparams++; break; - case 'r': - restart = 1; - break; case 's': with_hydro = 1; break; @@ -464,72 +458,6 @@ int main(int argc, char *argv[]) { } #endif - /* Time to check if this is a restart and if so that we have all the - * necessary files and the restart conditions are acceptable. */ - char restartname[PARSER_MAX_LINE_SIZE]; - parser_get_param_string(params, "Restarts:basename", restartname); - char restartdir[PARSER_MAX_LINE_SIZE]; - parser_get_param_string(params, "Restarts:subdir", restartdir); - - if (restart) { - - /* The directory must exist. */ - if (access(restartdir, W_OK | X_OK) != 0) { - error("Cannot restart as no restart subdirectory: %s (%s)", restartdir, - strerror(errno)); - } - - /* Restart files. */ - char **restartfiles = NULL; - int nrestartfiles = 0; - - if (myrank == 0) { - /* Locate the restart files. These are defined in the parameter file - * (one reason for defering until now. */ - - /* And enumerate all the restart files. */ - restartfiles = restart_locate(restartdir, restartname, &nrestartfiles); - if (nrestartfiles == 0) - error("Failed to locate any restart files in %s", restartdir); - - /* We need one file per rank. */ - if (nrestartfiles != nr_nodes) - error("Incorrect number of restart files, expected %d found %d", - nr_nodes, nrestartfiles); - - if (verbose > 0) - for (int i = 0; i < nrestartfiles; i++) - message("found restart file: %s", restartfiles[i]); - } - - /* Distribute the restart files, need one for each rank. */ -#ifdef WITH_MPI - if (myrank == 0) { - - for (int i = 1; i < nr_nodes; i++) { - strcpy(restartfile, restartfiles[i]); - MPI_Send(restartfile, 200, MPI_BYTE, i, 0, MPI_COMM_WORLD); - } - - /* Keep local file. */ - strcpy(restartfile, restartfiles[0]); - - /* Finished with the list. */ - restart_locate_free(nrestartfiles, restartfiles); - - } else { - MPI_Recv(restartfile, 200, MPI_BYTE, 0, 0, MPI_COMM_WORLD, - MPI_STATUS_IGNORE); - } - if (verbose > 1) - message("local restart file = %s", restartfile); -#else - /* Just one restart file. */ - strcpy(restartfile, restartfiles[0]); -#endif - - } - /* Initialize unit system and constants */ struct unit_system us; struct phys_const prog_const; @@ -795,15 +723,6 @@ int main(int argc, char *argv[]) { /* Print the timers. */ if (with_verbose_timers) timers_print(e.step); - - /* Create restart files if required. */ - if (restart_genname(restartdir, restartname, - e.nodeID, restartfile, 200) == 0) { - restart_write(&e, restartfile); - } else { - error("Failed to generate restart filename"); - } - #ifdef SWIFT_DEBUG_TASKS /* Dump the task data using the given frequency. */ if (dump_tasks && (dump_tasks == 1 || j % dump_tasks == 1)) { diff --git a/src/Makefile.am b/src/Makefile.am index 67f34458a1d783561dee4beaff3af4bdd65aa5f6..df1ed0a670892ecd2a41b229a8707ffb993a7cc3 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -46,8 +46,7 @@ include_HEADERS = space.h runner.h queue.h task.h lock.h cell.h part.h const.h \ hydro_properties.h riemann.h threadpool.h cooling.h cooling_struct.h sourceterms.h \ sourceterms_struct.h statistics.h memswap.h cache.h runner_doiact_vec.h profiler.h \ dump.h logger.h active.h timeline.h xmf.h gravity_properties.h gravity_derivatives.h \ - gravity_softened_derivatives.h vector_power.h collectgroup.h hydro_space.h sort_part.h\ - restart.h + gravity_softened_derivatives.h vector_power.h collectgroup.h hydro_space.h sort_part.h # Common source files AM_SOURCES = space.c runner.c queue.c task.c cell.c engine.c \ @@ -58,8 +57,8 @@ AM_SOURCES = space.c runner.c queue.c task.c cell.c engine.c \ runner_doiact_fft.c threadpool.c cooling.c sourceterms.c \ statistics.c runner_doiact_vec.c profiler.c dump.c logger.c \ part_type.c xmf.c gravity_properties.c gravity.c \ - collectgroup.c hydro_space.c equation_of_state.c \ - restart.c + collectgroup.c hydro_space.c equation_of_state.c + # Include files for distribution, not installation. nobase_noinst_HEADERS = align.h approx_math.h atomic.h barrier.h cycle.h error.h inline.h kernel_hydro.h kernel_gravity.h \ diff --git a/src/engine.c b/src/engine.c index e4655e94c95dad593d5f6b66e37af4a67e3a3bf1..cef4e3e6f3aa00c40ba92e3980b9fc472b6898bc 100644 --- a/src/engine.c +++ b/src/engine.c @@ -64,7 +64,6 @@ #include "partition.h" #include "profiler.h" #include "proxy.h" -#include "restart.h" #include "runner.h" #include "serial_io.h" #include "single_io.h" @@ -5625,78 +5624,3 @@ void engine_clean(struct engine *e) { space_clean(e->s); threadpool_clean(&e->threadpool); } - -/** - * @brief Write the engine struct and its contents to the given FILE as a - * stream of bytes. - * - * @param e the engine - * @param stream the file stream - */ -void engine_struct_dump(struct engine *e, FILE *stream) { - - /* The engine. */ - restart_write_block(e, sizeof(struct engine), stream, "engine struct"); - - /* Now for the other pointers, these use their own save functions. */ - - /* space */ - /* internal units */ - /* snapshot units */ - /* repartition */ - /* physical constants */ - /* hydro props */ - /* gravity props */ - /* external potential props */ - /* cooling props */ - /* sourceterm props */ - /* parameters */ - - -} - -/** - * @brief Re-create an engine struct and its contents from the given FILE - * stream. - * - * @param e the engine - * @param stream the file stream - */ -void engine_struct_restore(struct engine *e, FILE *stream) { - - /* The engine. */ - restart_read_block(e, sizeof(struct engine), stream, "engine struct"); - - /* Re-initializations as necessary. */ - - /* runners */ - /* scheduler */ - /* threadpool */ - - /* stats file */ - /* timesteps file */ - - /* barriers */ - - /* proxies */ - - /* links */ - - - /* Now for the other pointers, these use their own save functions. */ - /* space */ - /* internal units */ - /* snapshot units */ - /* repartition */ - /* physical constants */ - /* hydro props */ - /* gravity props */ - /* external potential props */ - /* cooling props */ - /* sourceterm props */ - /* parameters */ - - /* Want to force a rebuild before using this engine. Wait to repartition.*/ - e->forcerebuild = 1; - e->forcerepart = 0; -} diff --git a/src/engine.h b/src/engine.h index 97a0c0521ab898c21e4dba1ea20019989609bb92..a571f2b24d57b2720c3c77ebd7600a3830e4d2a3 100644 --- a/src/engine.h +++ b/src/engine.h @@ -332,9 +332,4 @@ void engine_unpin(); void engine_clean(struct engine *e); int engine_estimate_nr_tasks(struct engine *e); -/* Struct dump/restore support. */ -void engine_struct_dump(struct engine *e, FILE *stream); -void engine_struct_restore(struct engine *e, FILE *stream); - - #endif /* SWIFT_ENGINE_H */ diff --git a/src/restart.c b/src/restart.c deleted file mode 100644 index 6358908df84831c7b8fc1f1d948753851fd833ab..0000000000000000000000000000000000000000 --- a/src/restart.c +++ /dev/null @@ -1,158 +0,0 @@ -/******************************************************************************* - * This file is part of SWIFT. - * Copyright (c) 2018 Peter W. Draper (p.w.draper@durham.ac.uk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - ******************************************************************************/ - -/** - * @file restart.c - * @brief support for SWIFT restarts - */ - -/* Config parameters. */ -#include "../config.h" - -/* Standard headers. */ -#include <errno.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <glob.h> - -#include "engine.h" -#include "error.h" - -/** - * @brief generate a name for a restart file. - * - * @param dir the directory of restart files. - * @param basename the basename of the restart files. - * @param nodeID a unique integer, usually the nodeID of the engine. - * @param name pointer to a string to hold the result. - * @param size length of name. - * - * @result 0 if the string was large enough. - */ -int restart_genname(const char *dir, const char *basename, - int nodeID, char *name, int size) { - int n = snprintf(name, size, "%s/%s_%04d.hdf5", dir, basename, nodeID); - message("name = %s", name); - return (n >= size); -} - -/** - * @brief locate all the restart files in the given directory with the given - * basename. - * @param dir the directory of restart files. - * @param basename the basename of the restart files. - * @param nfiles the number of restart files located. - * - * @result pointer to an array of strings with all the filenames found, - * release by calling restart_locate_free(). - */ -char **restart_locate(const char *dir, const char *basename, - int *nfiles) { - *nfiles = 0; - - /* Construct the glob pattern for locating files. */ - char pattern[200]; - if (snprintf(pattern, 200, "%s/%s_[0-9]*.hdf5", dir, basename) > 200) { - - glob_t globbuf; - char **files = NULL; - if (glob(pattern, 0, NULL, &globbuf) == 0) { - *nfiles = globbuf.gl_pathc; - files = malloc(sizeof(char *) * *nfiles); - for (int i = 0; i < *nfiles; i++) { - files[i] = strdup(globbuf.gl_pathv[i]); - } - } - - globfree(&globbuf); - return files; - } - error("Failed to construct pattern to locate restart files"); - - return NULL; -} - - -/** - * @brief Release the memory allocated to hold the restart file names. - * - * @param nfiles the number of restart files located. - * @param files the list of filenames found in call to restart_locate(). - */ -void restart_locate_free(int nfiles, char **files) { - for (int i = 0; i < nfiles; i++) { - free(files[i]); - } - free(files); -} - - -/** - * @brief Write a restart file for the given engine struct. - */ -void restart_write(struct engine *e, const char *filename) { - - FILE *stream = fopen(filename, "w"); - if (stream == NULL) - error("Failed to open restart file: %s (%s)", filename, strerror(errno)); - - engine_struct_dump(e, stream); -} - -/** - * @brief Read a restart file to construct an saved engine. - */ -void restart_read(struct engine *e, const char *filename) { - - FILE *stream = fopen(filename, "r"); - if (stream == NULL) - error("Failed to open restart file: %s (%s)", filename, strerror(errno)); - - engine_struct_restore(e, stream); -} - -/* @brief Read a block of memory from a file stream into a memory location. - * Exits the application if the read fails. - * - * @param ptr pointer to the memory - * @param size the number of bytes to read - * @param stream the file stream - * @param errstr a context string to qualify any errors. - */ -void restart_read_block(void *ptr, size_t size, FILE *stream, const char *errstr) { - size_t nread = fread(ptr, size, 1, stream); - if (nread != size) - error("Failed to restore %s from restart file (%s)", errstr, - ferror(stream) ? strerror(errno) : "unexpected end of file"); -} - -/* @brief Write a block of memory to a file stream from a memory location. - * Exits the application if the write fails. - * - * @param ptr pointer to the memory - * @param size the number of bytes to write - * @param stream the file stream - * @param errstr a context string to qualify any errors. - */ -void restart_write_block(void *ptr, size_t size, FILE *stream, const char *errstr) { - size_t nwrite = fwrite(ptr, size , 1, stream); - if (nwrite != size) - error("Failed to save %s to restart file (%s)", errstr, strerror(errno)); -} diff --git a/src/restart.h b/src/restart.h deleted file mode 100644 index 226e65f6b760090818cbf10614827860e40cc512..0000000000000000000000000000000000000000 --- a/src/restart.h +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * This file is part of SWIFT. - * Copyright (c) 2018 Peter W. Draper (p.w.draper@durham.ac.uk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - ******************************************************************************/ -#ifndef SWIFT_RESTART_H -#define SWIFT_RESTART_H - -void restart_write(struct engine *e, const char *filename); -void restart_read(struct engine *e, const char *filename); - -char **restart_locate(const char *dir, const char *basename, int *nfiles); -void restart_locate_free(int nfiles, char **files); -int restart_genname(const char *dir, const char *basename, - int nodeID, char *name, int size); -void restart_read_block(void *ptr, size_t size, FILE* stream, const char *errstr); -void restart_write_block(void *ptr, size_t size, FILE* stream, const char *errstr); - -#endif /* SWIFT_RESTART_H */ diff --git a/src/swift.h b/src/swift.h index d8acaa45754a898fbaa3116015417717bf6f8ca1..33a0425154d45e030443bc7f2c405377ef6a39e2 100644 --- a/src/swift.h +++ b/src/swift.h @@ -53,7 +53,6 @@ #include "potential.h" #include "profiler.h" #include "queue.h" -#include "restart.h" #include "runner.h" #include "scheduler.h" #include "serial_io.h"