diff options
author | Ian Jauslin <ian@jauslin.org> | 2022-05-18 09:57:06 +0200 |
---|---|---|
committer | Ian Jauslin <ian@jauslin.org> | 2022-05-18 09:57:06 +0200 |
commit | f21ab0d79594c23ead5b98a31ad6b6fb82d8b88a (patch) | |
tree | bca0d5fbe7f3dc5c8c049f162c200fb086246194 /src/navier-stokes.h | |
parent | c32c52c94ab393f970e2e0a1289ae22e7ca08c9c (diff) |
Rewrite: change cli arguments handling
Diffstat (limited to 'src/navier-stokes.h')
-rw-r--r-- | src/navier-stokes.h | 53 |
1 files changed, 23 insertions, 30 deletions
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 <complex.h> #include <fftw3.h> -// 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 |