From c00c3115284691e98d724e630aca7a41087502eb Mon Sep 17 00:00:00 2001 From: Ian Jauslin Date: Wed, 12 Apr 2023 19:05:01 -0400 Subject: Write restart command to savefile --- src/navier-stokes.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'src/navier-stokes.c') diff --git a/src/navier-stokes.c b/src/navier-stokes.c index 0fe4407..5cee434 100644 --- a/src/navier-stokes.c +++ b/src/navier-stokes.c @@ -2,6 +2,7 @@ #include "io.h" #include #include +#include // compute solution as a function of time int uk( @@ -93,7 +94,11 @@ int eea( unsigned int running_avg_window, unsigned int starting_time, unsigned int nthreads, - FILE* savefile + FILE* savefile, + // for interrupt recovery + char* cmd_string, + char* params_string, + char* savefile_string ){ _Complex double* u; _Complex double* tmp1; @@ -186,9 +191,9 @@ int eea( avg_print_short_en+=enstrophy/short_len; } - if(t % print_freq ==0 && t>0){ + if(t % print_freq ==0 && t>starting_time){ // compute averages - if (t > running_avg_window) { + if (t > running_avg_window + starting_time) { avg_e=save_print_short_e[nr_print_in_window]*((double)short_len/running_avg_window); avg_a=save_print_short_a[nr_print_in_window]*((double)short_len/running_avg_window); avg_en=save_print_short_en[nr_print_in_window]*((double)short_len/running_avg_window); @@ -226,7 +231,7 @@ int eea( } } - if(t>running_avg_window && t%print_freq==0){ + if(t>running_avg_window + starting_time && t%print_freq==0){ fprintf(stderr,"%d % .8e % .8e % .8e % .8e % .8e % .8e % .8e\n",t,t*delta, avg_a, avg_e, avg_en, alpha, energy, enstrophy); printf("%8d % .15e % .15e % .15e % .15e % .15e % .15e % .15e\n",t,t*delta, avg_a, avg_e, avg_en, alpha, energy, enstrophy); } @@ -237,6 +242,24 @@ int eea( if (savefile==NULL){ savefile=stderr; } + fprintf(savefile,"# Interrupted computation. Resume with\n"); + // command to resume + fprintf(savefile,"#! "); + + fprintf(savefile, cmd_string); + + // params + // allocate buffer for params + char* params=calloc(sizeof(char), strlen(params_string)); + strcpy(params, params_string); + remove_entry(params, "starting_time"); + remove_entry(params, "init"); + remove_entry(params, "nsteps"); + fprintf(savefile," -p \"%s;starting_time=%u;nsteps=%u;init=file:%s\"", params, t+1, nsteps-t-1, savefile_string); + free(params); + + fprintf(savefile," energy\n"); + break; } } -- cgit v1.2.3-54-g00ecf