binary io

This commit is contained in:
Ian Jauslin 2023-04-14 15:01:52 -04:00
parent c00c311528
commit d5d5c15b7e
4 changed files with 64 additions and 3 deletions

View File

@ -88,6 +88,6 @@ int init_file (
int K2, int K2,
FILE* initfile FILE* initfile
){ ){
read_u(u0, K1, K2, initfile); read_u_bin(u0, K1, K2, initfile);
return 0; return 0;
} }

View File

@ -115,6 +115,60 @@ int read_u(_Complex double* u, int K1, int K2, FILE* file){
return 0; return 0;
} }
// write final entry to file in binary format
int write_u_bin(_Complex double* u, int K1, int K2, FILE* file){
// do nothing if there is no file
if(file==NULL){
return 0;
}
fwrite(u, sizeof(_Complex double), (K1+1)*(2*K2+1), file);
return 0;
}
// read u from file in binary format
int read_u_bin(_Complex double* u, int K1, int K2, FILE* file){
char c;
int ret;
// do nothing if there is no file
if(file==NULL){
return 0;
}
// seek past initial comments
while(true){
ret=fscanf(file, "%c", &c);
if (ret==1 && c=='#'){
// find endline
while(true){
ret=fscanf(file, "%c", &c);
// end of file
if (ret==0) {
// no data
return 0;
}
if (c=='\n'){
break;
}
}
} else {
if (ret==1){
// backtrack
fseek(file, -sizeof(char), SEEK_CUR);
}
// past comments
break;
}
}
fread(u, sizeof(_Complex double), (K1+1)*(2*K2+1), file);
return 0;
}
// remove an entry from params string (inplace) // remove an entry from params string (inplace)
int remove_entry( int remove_entry(
char* param_str, char* param_str,

View File

@ -5,9 +5,11 @@
// write u to file // write u to file
int write_u(_Complex double* u, int K1, int K2, FILE* file); int write_u(_Complex double* u, int K1, int K2, FILE* file);
int write_u_bin(_Complex double* u, int K1, int K2, FILE* file);
// read u from file // read u from file
int read_u(_Complex double* u, int K1, int K2, FILE* file); int read_u(_Complex double* u, int K1, int K2, FILE* file);
int read_u_bin(_Complex double* u, int K1, int K2, FILE* file);
// remove an entry from params string (inplace) // remove an entry from params string (inplace)
int remove_entry(char* param_str, char* entry); int remove_entry(char* param_str, char* entry);

View File

@ -71,7 +71,7 @@ int uk(
} }
// save final entry to savefile // save final entry to savefile
write_u(u, K1, K2, savefile); write_u_bin(u, K1, K2, savefile);
ns_free_tmps(u, tmp1, tmp2, tmp3, fft1, fft2, ifft); ns_free_tmps(u, tmp1, tmp2, tmp3, fft1, fft2, ifft);
return(0); return(0);
@ -242,6 +242,7 @@ int eea(
if (savefile==NULL){ if (savefile==NULL){
savefile=stderr; savefile=stderr;
} }
fprintf(savefile,"# Interrupted computation. Resume with\n"); fprintf(savefile,"# Interrupted computation. Resume with\n");
// command to resume // command to resume
fprintf(savefile,"#! "); fprintf(savefile,"#! ");
@ -265,7 +266,11 @@ int eea(
} }
// save final entry to savefile // save final entry to savefile
write_u(u, K1, K2, savefile); if(savefile==stderr || savefile==stdout){
write_u(u, K1, K2, savefile);
} else {
write_u_bin(u, K1, K2, savefile);
}
if(running_avg_window!=0){ if(running_avg_window!=0){
free(save_print_e); free(save_print_e);