Ian Jauslin
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jauslin <ian.jauslin@rutgers.edu>2023-04-26 11:27:03 -0400
committerIan Jauslin <ian.jauslin@rutgers.edu>2023-04-26 11:27:03 -0400
commitaa8825d9d8022412cd68e887e2e3cf7c10a61ed5 (patch)
tree731e562c59651dc5371ffb5aee88f5800ce6d943 /src/main.c
parent527365d62e8c770142c3c1065b5f973433bd60b2 (diff)
parameters to choose rk2
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c54
1 files changed, 34 insertions, 20 deletions
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 <stdbool.h>
#include <stdint.h>
#include <errno.h>
-#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);