Ian Jauslin
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jauslin <ian@jauslin.org>2022-05-18 09:57:06 +0200
committerIan Jauslin <ian@jauslin.org>2022-05-18 09:57:06 +0200
commitf21ab0d79594c23ead5b98a31ad6b6fb82d8b88a (patch)
treebca0d5fbe7f3dc5c8c049f162c200fb086246194 /src/navier-stokes.h
parentc32c52c94ab393f970e2e0a1289ae22e7ca08c9c (diff)
Rewrite: change cli arguments handling
Diffstat (limited to 'src/navier-stokes.h')
-rw-r--r--src/navier-stokes.h53
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