parameters to choose rk2
This commit is contained in:
		
							
								
								
									
										54
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								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);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user