Ian Jauslin
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/navier-stokes.c')
-rw-r--r--src/navier-stokes.c31
1 files changed, 27 insertions, 4 deletions
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 <math.h>
#include <stdlib.h>
+#include <string.h>
// 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;
}
}