16#include <Init_spectral.h>
17#include <IJK_Field_vector.h>
34double randInRange(
double min,
double max)
36 return min + ((double)(rand())/(double)(RAND_MAX)) * (max-min);
39void compute_inital_velocity_spectral(IJK_Field_vector3_double& velocity)
42 Cout <<
" = Initialisation du champ de vitesse =" << finl;
49 unsigned int seed = 1;
50 int kmax = velocity[0].ni();
54 DoubleTab angles(kmax,3);
58 for(
int i=0; i<kmax; i++)
60 angles(i,0) = randInRange(0.0, 2.*M_PI);
61 angles(i,1) = randInRange(0.0, 2.*M_PI);
62 angles(i,2) = randInRange(0.0, 2.*M_PI);
66 DoubleTab kx(kmax, 1);
67 for (
int i=0 ; i<kmax/2; i++)
71 for (
int i=-kmax/2; i<0; i++)
78 fftw_complex *ux_f = (fftw_complex*) fftw_malloc (
sizeof(fftw_complex) * kmax*kmax*kmax );
79 fftw_complex *uy_f = (fftw_complex*) fftw_malloc (
sizeof(fftw_complex) * kmax*kmax*kmax );
80 fftw_complex *uz_f = (fftw_complex*) fftw_malloc (
sizeof(fftw_complex) * kmax*kmax*kmax );
83 for(
int i = 0; i<kmax; i++)
85 for(
int j = 0; j<kmax; j++)
88 for(
int k = 0; k<kmax; k++)
106 ux_f[(i*kmax+j)*kmax+k][0] = 0;
107 ux_f[(i*kmax+j)*kmax+k][1] = 0;
108 uy_f[(i*kmax+j)*kmax+k][0] = 0;
109 uy_f[(i*kmax+j)*kmax+k][1] = 0;
110 uz_f[(i*kmax+j)*kmax+k][0] = 0;
111 uz_f[(i*kmax+j)*kmax+k][1] = 0;
117 ux_f[((kmax/2+1)*kmax+kmax/2+1)*kmax+kmax/2+1][0] = 1;
118 uy_f[((kmax/2+1)*kmax+kmax/2+1)*kmax+kmax/2+1][0] = 1;
121 fftw_complex *ux_r = (fftw_complex*) fftw_malloc (
sizeof(fftw_complex) * kmax*kmax*kmax );
122 fftw_complex *uy_r = (fftw_complex*) fftw_malloc (
sizeof(fftw_complex) * kmax*kmax*kmax );
123 fftw_complex *uz_r = (fftw_complex*) fftw_malloc (
sizeof(fftw_complex) * kmax*kmax*kmax );
126 plan_ux = fftw_plan_dft_3d(kmax, kmax, kmax, ux_f, ux_r, FFTW_BACKWARD, FFTW_ESTIMATE);
127 plan_uy = fftw_plan_dft_3d(kmax, kmax, kmax, uy_f, uy_r, FFTW_BACKWARD, FFTW_ESTIMATE);
128 plan_uz = fftw_plan_dft_3d(kmax, kmax, kmax, uz_f, uz_r, FFTW_BACKWARD, FFTW_ESTIMATE);
131 fftw_execute(plan_ux);
132 fftw_execute(plan_uy);
133 fftw_execute(plan_uz);
138 IJK_Field_double& vx = velocity[0];
139 IJK_Field_double& vy = velocity[1];
140 IJK_Field_double& vz = velocity[2];
142 const int ni = vx.
ni();
143 const int nj = vx.
nj();
144 const int nk = vx.
nk();
145 if ((ni != nj) || (nj != nk))
148 for (
int k = 0; k < nk; k++)
150 for (
int j = 0; j < nj; j++)
152 for (
int i = 0; i < ni; i++)
155 vx(i,j,k) =ux_r[(i*kmax +j)*kmax+k][0]/sqrt(2);
156 vy(i,j,k) =uy_r[(i*kmax +j)*kmax+k][0]/sqrt(2);
157 vz(i,j,k) =uz_r[(i*kmax +j)*kmax+k][0]/sqrt(2);
Class defining operators and methods for all reading operation in an input flow (file,...
classe Objet_U Cette classe est la classe de base des Objets de TRUST
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.