From f21ab0d79594c23ead5b98a31ad6b6fb82d8b88a Mon Sep 17 00:00:00 2001 From: Ian Jauslin Date: Wed, 18 May 2022 09:57:06 +0200 Subject: Rewrite: change cli arguments handling --- src/navier-stokes.h | 53 +++++++++++++++++++++++------------------------------ 1 file changed, 23 insertions(+), 30 deletions(-) (limited to 'src/navier-stokes.h') diff --git a/src/navier-stokes.h b/src/navier-stokes.h index cd093d7..5ac8d7d 100644 --- a/src/navier-stokes.h +++ b/src/navier-stokes.h @@ -4,45 +4,38 @@ #include #include -// to extract elements from array of size S representing a function of momentum, use -// array[KEXTRACT(kx,ky,size)] -#define KLOOKUP(X,Y,S) (X>=0?X:S+X)*S+(Y>=0?Y:S+Y) - - -// parameters for the NS equation -typedef struct ns_params { - // number of modes - int K; - // 2*K+1 - int S; - // 4*K+1 - int N; - // forcing term - _Complex double* g; - // time step - double h; - // friction - double nu; -} ns_params; // arrays on which the ffts are performed typedef struct fft_vects { - fftw_complex* fft1; - fftw_complex* fft2; - fftw_complex* invfft; - fftw_plan fft1_plan; - fftw_plan fft2_plan; - fftw_plan invfft_plan; -} fft_vects; + fftw_complex* fft; + fftw_plan fft_plan; +} fft_vect; + +// compute u_k +int uk( int K1, int K2, int N1, int N2, unsigned int nsteps, double nu, double delta, _Complex double (*g)(int,int), unsigned int print_freq); + +// compute enstrophy +int enstrophy( int K1, int K2, int N1, int N2, unsigned int nsteps, double nu, double delta, _Complex double (*g)(int,int), unsigned int print_freq); + +// initialize vectors for computation +int ns_init_tmps( _Complex double **u, _Complex double ** tmp1, _Complex double **tmp2, _Complex double **tmp3, fft_vect* fft1, fft_vect *fft2, fft_vect *ifft, int K1, int K2, int N1, int N2); +// release vectors +int ns_free_tmps( _Complex double* u, _Complex double* tmp1, _Complex double *tmp2,_Complex double *tmp3, fft_vect fft1, fft_vect fft2, fft_vect ifft); + +// initial value +int ns_init_u( _Complex double* u, int K1, int K2); // next time step for Irreversible Navier-Stokes equation -int ins_step(_Complex double* u, ns_params params, fft_vects vects, _Complex double* tmp1, _Complex double* tmp2, _Complex double* tmp3); +int ins_step( _Complex double* u, int K1, int K2, int N1, int N2, double nu, double delta, _Complex double (*g)(int,int), fft_vect fft1, fft_vect fft2,fft_vect ifft, _Complex double* tmp1, _Complex double *tmp2, _Complex double *tmp3); // right side of Irreversible Navier-Stokes equation -int ins_rhs(_Complex double* out, _Complex double* u, ns_params params, fft_vects vects); +int ins_rhs( _Complex double* out, _Complex double* u, int K1, int K2, int N1, int N2, double nu, _Complex double (*g)(int,int), fft_vect fft1, fft_vect fft2, fft_vect ifft); // compute alpha -_Complex double compute_alpha(_Complex double* u, ns_params params); +_Complex double compute_alpha( _Complex double* u, int K1, int K2, _Complex double (*g)(int,int)); + +// get index for kx,ky in array of size S +int klookup( int kx, int ky, int S1, int S2); #endif -- cgit v1.2.3-54-g00ecf