#define VERSION "0.1" #include #include #include #include #include #include #include "navier-stokes.h" #include "driving.h" // usage message int print_usage(); // read command line arguments int read_args(int argc, const char* argv[], char** params, unsigned int* driving_force, unsigned int* command, unsigned int* nthreads); int read_params(char* params, int* K1, int* K2, int* N1, int* N2, unsigned int* nsteps, double* nu, double* delta, double* L, unsigned int* print_freq); int set_parameter(char* lhs, char* rhs, int* K1, int* K2, int* N1, int* N2, unsigned int* nsteps, double* nu, double* delta, double* L, unsigned int* print_freq, bool* setN1, bool* setN2); #define COMMAND_UK 1 #define COMMAND_ENSTROPHY 2 #define COMMAND_QUIET 3 #define COMMAND_ENERGY 4 #define DRIVING_ZERO 1 #define DRIVING_TEST 2 int main ( int argc, const char* argv[] ){ char* params=NULL; int K1,K2; int N1,N2; unsigned int nsteps; double nu,delta,L; _Complex double (*g)(int,int); int ret; unsigned int driving,command; unsigned int print_freq; unsigned int nthreads=1; command=0; driving=0; // read command line arguments ret=read_args(argc, argv, ¶ms, &driving, &command, &nthreads); if(ret<0){ return(-1); } // read params ret=read_params(params, &K1, &K2, &N1, &N2, &nsteps, &nu, &delta, &L, &print_freq); if(ret<0){ return(-1); } // set driving force switch(driving){ case DRIVING_ZERO: g=g_zero; break; case DRIVING_TEST: g=g_test; break; default: g=g_zero; break; } // run command if (command==COMMAND_UK){ uk(K1, K2, N1, N2, nsteps, nu, delta, L, g, print_freq, nthreads); } else if (command==COMMAND_ENERGY){ energy(K1, K2, N1, N2, nsteps, nu, delta, L, g, print_freq, nthreads); } else if(command==COMMAND_ENSTROPHY){ energy(K1, K2, N1, N2, nsteps, nu, delta, L, g, print_freq, nthreads); } else if(command==COMMAND_QUIET){ quiet(K1, K2, N1, N2, nsteps, nu, delta, L, g, nthreads); } else if(command==0){ fprintf(stderr, "error: no command specified\n"); print_usage(); } return(0); } // usage message int print_usage(){ fprintf(stderr, "usage:\n nstrophy [-p parameters] [-g driving_force] \n\n"); return(0); } // read command line arguments #define CP_FLAG_PARAMS 1 #define CP_FLAG_DRIVING 2 #define CP_FLAG_NTHREADS 3 int read_args( int argc, const char* argv[], char** params, unsigned int* driving_force, unsigned int* command, unsigned int* nthreads ){ int i; int ret; // pointers char* ptr; // flag that indicates what argument is being read int flag=0; // loop over arguments for(i=1;i