From aa8825d9d8022412cd68e887e2e3cf7c10a61ed5 Mon Sep 17 00:00:00 2001 From: Ian Jauslin Date: Wed, 26 Apr 2023 11:27:03 -0400 Subject: parameters to choose rk2 --- src/main.c | 54 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 20 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index d7d30bb..4ad182e 100644 --- a/src/main.c +++ b/src/main.c @@ -9,12 +9,14 @@ #include #include #include -#include "navier-stokes.h" + +#include "constants.cpp" #include "driving.h" #include "init.h" #include "int_tools.h" - #include "io.h" +#include "navier-stokes.h" + // structure to store parameters, to make it easier to pass parameters to CLI functions typedef struct nstrophy_parameters { @@ -33,6 +35,7 @@ typedef struct nstrophy_parameters { uint64_t starting_time; unsigned int driving; unsigned int init; + unsigned int algorithm; FILE* initfile; FILE* drivingfile; } nstrophy_parameters; @@ -55,21 +58,6 @@ _Complex double* set_init(nstrophy_parameters parameters); // signal handler void sig_handler (int signo); -#define COMMAND_UK 1 -#define COMMAND_EEA 2 -#define COMMAND_QUIET 3 - -#define DRIVING_ZERO 1 -#define DRIVING_TEST 2 -#define DRIVING_FILE 3 -#define DRIVING_FILE_TXT 4 - -#define INIT_RANDOM 1 -#define INIT_GAUSSIAN 2 -#define INIT_FILE 3 -#define INIT_FILE_TXT 4 - - // global variable to handle interrupts volatile bool g_abort = false; // signal handler @@ -165,15 +153,15 @@ int main ( // 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.irreversible, parameters.print_freq, parameters.starting_time, nthreads, savefile); + uk(parameters.K1, parameters.K2, parameters.N1, parameters.N2, parameters.nsteps, parameters.nu, parameters.delta, parameters.L, u0, g, parameters.irreversible, parameters.algorithm, parameters.print_freq, parameters.starting_time, nthreads, savefile); } else if(command==COMMAND_EEA){ // register signal handler to handle aborts signal(SIGINT, sig_handler); - eea(parameters.K1, parameters.K2, parameters.N1, parameters.N2, parameters.nsteps, parameters.nu, parameters.delta, parameters.L, u0, g, parameters.irreversible, parameters.print_freq, parameters.starting_time, nthreads, savefile, (char*)argv[0], param_str, savefile_str); + eea(parameters.K1, parameters.K2, parameters.N1, parameters.N2, parameters.nsteps, parameters.nu, parameters.delta, parameters.L, u0, g, parameters.irreversible, parameters.algorithm, parameters.print_freq, parameters.starting_time, nthreads, savefile, (char*)argv[0], param_str, savefile_str); } else if(command==COMMAND_QUIET){ - quiet(parameters.K1, parameters.K2, parameters.N1, parameters.N2, parameters.nsteps, parameters.nu, parameters.delta, parameters.L, parameters.starting_time, u0, g, parameters.irreversible, nthreads, savefile); + quiet(parameters.K1, parameters.K2, parameters.N1, parameters.N2, parameters.nsteps, parameters.nu, parameters.delta, parameters.L, parameters.starting_time, u0, g, parameters.irreversible, parameters.algorithm, nthreads, savefile); } else if(command==0){ fprintf(stderr, "error: no command specified\n"); @@ -250,6 +238,18 @@ int print_params( break; } + switch(parameters.algorithm){ + case ALGORITHM_RK4: + fprintf(file,", algorithm=RK4"); + break; + case ALGORITHM_RK2: + fprintf(file,", algorithm=RK2"); + break; + default: + fprintf(file,", algorithm=RK4"); + break; + } + fprintf(file,"\n"); return 0; @@ -376,6 +376,7 @@ int read_params( parameters->drivingfile=NULL; parameters->init=INIT_GAUSSIAN; parameters->initfile=NULL; + parameters->algorithm=ALGORITHM_RK4; if (param_str!=NULL){ // init @@ -623,6 +624,19 @@ int set_parameter( return(-1); } } + // algorithm + else if (strcmp(lhs,"algorithm")==0){ + if (strcmp(rhs,"RK4")==0){ + parameters->algorithm=ALGORITHM_RK4; + } + else if (strcmp(rhs,"RK2")==0){ + parameters->algorithm=ALGORITHM_RK2; + } + else{ + fprintf(stderr, "error: unrecognized algorithm '%s'\n",rhs); + return(-1); + } + } else{ fprintf(stderr, "error: unrecognized parameter '%s'\n",lhs); return(-1); -- cgit v1.2.3-54-g00ecf