From 77043e249cf49fd533a1ffd6f53c0b6d6fcaaba8 Mon Sep 17 00:00:00 2001 From: Ian Jauslin Date: Thu, 26 May 2022 20:54:30 -0400 Subject: Make N be the smallest power of 2 larger than 3*K+1 --- src/main.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index 2fc2fcd..9999de5 100644 --- a/src/main.c +++ b/src/main.c @@ -9,6 +9,7 @@ #include "navier-stokes.h" #include "driving.h" #include "init.h" +#include "int_tools.h" // structure to store parameters, to make it easier to pass parameters to CLI functions typedef struct nstrophy_parameters { @@ -26,6 +27,8 @@ typedef struct nstrophy_parameters { // usage message int print_usage(); +// print parameters +int print_params(nstrophy_parameters parameters, unsigned int driving, unsigned int init, FILE* file); // read command line arguments int read_args(int argc, const char* argv[], char** params, unsigned int* driving_force, unsigned int* command, unsigned int* init, unsigned int* nthreads); @@ -82,6 +85,10 @@ int main ( // set initial condition u0=set_init(init, parameters); + // print parameters + print_params(parameters, driving, init, stderr); + print_params(parameters, driving, init, stdout); + // run command if (command==COMMAND_UK){ uk(parameters.K1, parameters.K2, parameters.N1, parameters.N2, parameters.nsteps, parameters.nu, parameters.delta, parameters.L, u0, g, parameters.print_freq, nthreads); @@ -112,6 +119,44 @@ int print_usage(){ return(0); } +// print parameters +int print_params( + nstrophy_parameters parameters, + unsigned int driving, + unsigned int init, + FILE* file +){ + fprintf(file,"# K1=%d, K2=%d, N1=%d, N2=%d, nu=%.15e, delta=%.15e, L=%.15e", parameters.K1, parameters.K2, parameters.N1, parameters.N2, parameters.nu, parameters.delta, parameters.L); + + switch(driving){ + case DRIVING_TEST: + fprintf(file,", driving=test"); + break; + case DRIVING_ZERO: + fprintf(file,", driving=zero"); + break; + default: + fprintf(file,", driving=test"); + break; + } + + switch(init){ + case INIT_RANDOM: + fprintf(file,", init=random"); + break; + case INIT_GAUSSIAN: + fprintf(file,", init=gaussian"); + break; + default: + fprintf(file,", init=gaussian"); + break; + } + + fprintf(file,"\n"); + + return 0; +} + // read command line arguments #define CP_FLAG_PARAMS 1 #define CP_FLAG_DRIVING 2 @@ -312,12 +357,12 @@ int read_params( free(buffer_rhs); } - // if N not set explicitly, set it + // if N not set explicitly, set it to the smallest power of 2 that is >3*K+1 (the fft is faster on vectors whose length is a power of 2) if (!setN1){ - parameters->N1=4*(parameters->K1)+1; + parameters->N1=smallest_pow2(3*(parameters->K1)); } if (!setN2){ - parameters->N2=4*(parameters->K2)+1; + parameters->N2=smallest_pow2(3*(parameters->K2)); } return(0); -- cgit v1.2.3-54-g00ecf