From b8781440fb081a820b7de9f409d1879c112bd0f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franck=20P=C3=A9rignon?= <franck.perignon@imag.fr> Date: Thu, 13 Nov 2014 14:37:48 +0000 Subject: [PATCH] nothing important --- HySoP/ParmesToSinglePrecision.patch | 947 ---------------------------- todo.org | 9 +- 2 files changed, 8 insertions(+), 948 deletions(-) delete mode 100644 HySoP/ParmesToSinglePrecision.patch diff --git a/HySoP/ParmesToSinglePrecision.patch b/HySoP/ParmesToSinglePrecision.patch deleted file mode 100644 index 5e644fe4e..000000000 --- a/HySoP/ParmesToSinglePrecision.patch +++ /dev/null @@ -1,947 +0,0 @@ -diff --git parmepy/constants.py parmepy/constants.py -index 3672059..3022c21 100644 ---- parmepy/constants.py -+++ parmepy/constants.py -@@ -18,13 +18,13 @@ else: - - PI = math.pi - # Set default type for real and integer numbers --PARMES_REAL = np.float64 -+PARMES_REAL = np.float32 - # type for array indices - PARMES_INDEX = np.uint32 - # type for integers --PARMES_INTEGER = np.int64 -+PARMES_INTEGER = np.int32 - # float type for MPI messages --PARMES_MPI_REAL = MPI.DOUBLE -+PARMES_MPI_REAL = MPI.REAL - ## default array layout (fortran or C convention) - ORDER = 'F' - # to check array ordering with : -diff --git parmepy/f2py/fftw2py.f90 parmepy/f2py/fftw2py.f90 -index 8645a9f..718eb19 100755 ---- parmepy/f2py/fftw2py.f90 -+++ parmepy/f2py/fftw2py.f90 -@@ -5,7 +5,7 @@ - module fftw2py - - use client_data -- use parmesparam -+ use parmesparam_sp - !> 2d case - use fft2d - !> 3d case -@@ -81,7 +81,7 @@ contains - subroutine solve_poisson_2d(omega,velocity_x,velocity_y) - real(pk),dimension(:,:),intent(in):: omega - real(pk),dimension(size(omega,1),size(omega,2)),intent(out) :: velocity_x,velocity_y -- real(pk) :: start -+ real(8) :: start - !f2py intent(in,out) :: velocity_x,velocity_y - start = MPI_WTime() - -@@ -117,7 +117,7 @@ contains - real(pk),dimension(:,:,:),intent(in):: omega_x,omega_y,omega_z - real(pk),dimension(size(omega_x,1),size(omega_y,2),size(omega_z,3)),intent(out) :: velocity_x,velocity_y,velocity_z - integer, dimension(3), intent(in) :: ghosts_vort, ghosts_velo -- real(pk) :: start -+ real(8) :: start - !f2py intent(in,out) :: velocity_x,velocity_y,velocity_z - start = MPI_WTime() - call r2c_3d(omega_x,omega_y,omega_z, ghosts_vort) -diff --git parmepy/f2py/scales2py.f90 parmepy/f2py/scales2py.f90 -index ab5b440..d56112e 100755 ---- parmepy/f2py/scales2py.f90 -+++ parmepy/f2py/scales2py.f90 -@@ -6,7 +6,7 @@ use advec, only : advec_init,advec_step,advec_step_Inter_basic,advec_step_Inter_ - use advec_vect, only : advec_step_Vect,advec_step_Inter_basic_Vect - use interpolation_velo, only : interpol_init - use mpi --use parmesparam -+use parmesparam_sp - - - implicit none -@@ -93,7 +93,7 @@ contains - real(pk), dimension(size(vx,1),size(vx,2),size(vx,3)), intent(inout) :: scal - !f2py real(pk) intent(in,out), depend(size(vx,1)) :: scal - -- real(pk) :: t0 -+ real(8) :: t0 - - t0 = MPI_Wtime() - call advec_step(dt,vx,vy,vz,scal) -diff --git setup.py.in setup.py.in -index f771350..22fd086 100644 ---- setup.py.in -+++ setup.py.in -@@ -71,8 +71,8 @@ if(enable_fortran is "ON"): - fortran_src.append(fortran_dir+'fftw2py.f90') - fftwdir = '@FFTWLIB@' - fftwdir = os.path.split(fftwdir)[0] -- parmeslib.append('fftw3') -- parmeslib.append('fftw3_mpi') -+ parmeslib.append('fftw3f') -+ parmeslib.append('fftw3f_mpi') - parmes_libdir.append(fftwdir) - else: - packages.append('parmepy.fakef2py') -diff --git src/client_data.f90 src/client_data.f90 -index 46b5268..77178d9 100755 ---- src/client_data.f90 -+++ src/client_data.f90 -@@ -1,14 +1,14 @@ - !> Some global parameters and variables - module client_data - -- use MPI, only : MPI_DOUBLE_PRECISION -+ use MPI, only : MPI_REAL - use, intrinsic :: iso_c_binding ! required for fftw - implicit none - - !> kind for real variables (simple or double precision) -- integer, parameter :: mk = kind(1.0d0) ! double precision -+ integer, parameter :: mk = kind(1.0) ! single precision - !> kind for real variables in mpi routines -- integer, parameter :: mpi_mk = MPI_DOUBLE_PRECISION -+ integer, parameter :: mpi_mk = MPI_REAL - !> Problem dimension (model, required for ppm to work properly) - integer, parameter :: dime = 2 - !> Real dimension -@@ -26,7 +26,7 @@ module client_data - !> to activate (or not) screen output - logical,parameter :: verbose = .True. - !> i (sqrt(-1) ...) -- complex(C_DOUBLE_COMPLEX), parameter :: Icmplx = cmplx(0._mk,1._mk, kind=mk) -+ complex(C_FLOAT_COMPLEX), parameter :: Icmplx = cmplx(0._mk,1._mk, kind=mk) - !> tolerance used to compute error - real(mk), parameter :: tolerance = 1e-12 - -diff --git src/fftw/Poisson.f90 src/fftw/Poisson.f90 -index 78b355c..8804e3d 100755 ---- src/fftw/Poisson.f90 -+++ src/fftw/Poisson.f90 -@@ -53,7 +53,7 @@ contains - real(mk),dimension(:,:,:),intent(in) :: omega_x,omega_y,omega_z - real(mk),dimension(:,:,:),intent(inout) :: velocity_x,velocity_y,velocity_z - integer, dimension(3), intent(in) :: ghosts_w, ghosts_v -- real(mk) :: start -+ real(8) :: start - !! Compute fftw forward transform - !! Omega is used to initialize the fftw buffer for input field. - -@@ -74,7 +74,7 @@ contains - - real(mk),dimension(:,:,:),intent(in) :: omega_x,omega_y,omega_z - real(mk),dimension(:,:,:),intent(inout) :: velocity_x,velocity_y,velocity_z -- real(mk) :: start -+ real(8) :: start - !! Compute fftw forward transform - !! Omega is used to initialize the fftw buffer for input field. - -diff --git src/fftw/fft2d.f90 src/fftw/fft2d.f90 -index c56412f..7edbfd3 100755 ---- src/fftw/fft2d.f90 -+++ src/fftw/fft2d.f90 -@@ -36,15 +36,15 @@ module fft2d - type(C_PTR) :: cbuffer2 - !! Note Franck : check if local declarations of datain/out works and improve perfs. - !> Field (complex values) for fftw input -- complex(C_DOUBLE_COMPLEX), pointer :: datain1(:,:),datain2(:,:) -+ complex(C_FLOAT_COMPLEX), pointer :: datain1(:,:),datain2(:,:) - !> Field (real values) for fftw input -- real(C_DOUBLE), pointer :: rdatain1(:,:) -+ real(C_FLOAT), pointer :: rdatain1(:,:) - !> Field (complex values) for fftw (forward) output -- complex(C_DOUBLE_COMPLEX), pointer :: dataout1(:,:) -+ complex(C_FLOAT_COMPLEX), pointer :: dataout1(:,:) - !> Field (real values) for fftw output -- real(C_DOUBLE), pointer :: rdatain2(:,:) -+ real(C_FLOAT), pointer :: rdatain2(:,:) - !> Field (complex values) for fftw (forward) output -- complex(C_DOUBLE_COMPLEX), pointer :: dataout2(:,:) -+ complex(C_FLOAT_COMPLEX), pointer :: dataout2(:,:) - !> GLOBAL number of points in each direction - integer(C_INTPTR_T),pointer :: fft_resolution(:) - !> LOCAL resolution -@@ -52,13 +52,13 @@ module fft2d - !> Offset in the direction of distribution - integer(c_INTPTR_T),dimension(2) :: local_offset - !> wave numbers for fft in x direction -- real(C_DOUBLE), pointer :: kx(:) -+ real(C_FLOAT), pointer :: kx(:) - !> wave numbers for fft in y direction -- real(C_DOUBLE), pointer :: ky(:) -+ real(C_FLOAT), pointer :: ky(:) - !> log file for fftw - character(len=20),parameter :: filename ="parmesfftw.log" - !> normalization factor -- real(C_DOUBLE) :: normFFT -+ real(C_FLOAT) :: normFFT - !> true if all the allocation stuff for global variables has been done. - logical :: is2DUpToDate = .false. - -@@ -81,7 +81,7 @@ contains - if(is2DUpToDate) return - - ! init fftw mpi context -- call fftw_mpi_init() -+ call fftwf_mpi_init() - - if(rank==0) open(unit=21,file=filename,form="formatted") - -@@ -90,27 +90,27 @@ contains - fft_resolution = resolution-1 - - ! compute "optimal" size (according to fftw) for local date (warning : dimension reversal) -- alloc_local = fftw_mpi_local_size_2d_transposed(fft_resolution(c_Y),fft_resolution(c_X),main_comm,& -+ alloc_local = fftwf_mpi_local_size_2d_transposed(fft_resolution(c_Y),fft_resolution(c_X),main_comm,& - local_resolution(c_Y),local_offset(c_Y),local_resolution(c_X),local_offset(c_X)); - - ! allocate local buffer (used to save datain/dataout1 ==> in-place transform!!) -- cbuffer1 = fftw_alloc_complex(alloc_local) -+ cbuffer1 = fftwf_alloc_complex(alloc_local) - ! link datain and dataout1 to cbuffer, setting the right dimensions for each - call c_f_pointer(cbuffer1, datain1, [fft_resolution(c_X),local_resolution(c_Y)]) - call c_f_pointer(cbuffer1, dataout1, [fft_resolution(c_Y),local_resolution(c_X)]) - - ! second buffer used for backward transform. Used to copy dataout1 into dataout2 (input for backward transform and filter) - ! and to save (in-place) the transform of the second component of the velocity -- cbuffer2 = fftw_alloc_complex(alloc_local) -+ cbuffer2 = fftwf_alloc_complex(alloc_local) - call c_f_pointer(cbuffer2, datain2, [fft_resolution(c_X),local_resolution(c_Y)]) - call c_f_pointer(cbuffer2, dataout2, [fft_resolution(c_Y),local_resolution(c_X)]) - - ! create MPI plan for in-place forward/backward DFT (note dimension reversal) -- plan_forward1 = fftw_mpi_plan_dft_2d(fft_resolution(c_Y), fft_resolution(c_X),datain1,dataout1,& -+ plan_forward1 = fftwf_mpi_plan_dft_2d(fft_resolution(c_Y), fft_resolution(c_X),datain1,dataout1,& - main_comm,FFTW_FORWARD,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_OUT)) -- plan_backward1 = fftw_mpi_plan_dft_2d(fft_resolution(c_Y),fft_resolution(c_X),dataout1,datain1,& -+ plan_backward1 = fftwf_mpi_plan_dft_2d(fft_resolution(c_Y),fft_resolution(c_X),dataout1,datain1,& - main_comm,FFTW_BACKWARD,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_IN)) -- plan_backward2 = fftw_mpi_plan_dft_2d(fft_resolution(c_Y),fft_resolution(c_X),dataout2,datain2,& -+ plan_backward2 = fftwf_mpi_plan_dft_2d(fft_resolution(c_Y),fft_resolution(c_X),dataout2,datain2,& - main_comm,FFTW_BACKWARD,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_IN)) - - call computeKxC(lengths(c_X)) -@@ -139,7 +139,7 @@ contains - end do - - ! compute transform (as many times as desired) -- call fftw_mpi_execute_dft(plan_forward1, datain1, dataout1) -+ call fftwf_mpi_execute_dft(plan_forward1, datain1, dataout1) - - !!$ do i = 1, fft_resolution(c_Y) - !!$ write(*,'(a,i5,a,16f10.4)') 'out[',rank,'] ', dataout1(i,1:local_resolution(c_X)) -@@ -147,8 +147,8 @@ contains - !!$ - call filter_poisson_2d() - -- call fftw_mpi_execute_dft(plan_backward1, dataout1, datain1) -- call fftw_mpi_execute_dft(plan_backward2,dataout2,datain2) -+ call fftwf_mpi_execute_dft(plan_backward1, dataout1, datain1) -+ call fftwf_mpi_execute_dft(plan_backward2,dataout2,datain2) - do j = 1, local_resolution(c_Y) - do i = 1, fft_resolution(c_X) - velocity_x(i,j) = datain1(i,j)*normFFT -@@ -183,7 +183,7 @@ contains - if(is2DUpToDate) return - - ! init fftw mpi context -- call fftw_mpi_init() -+ call fftwf_mpi_init() - - if(rank==0) open(unit=21,file=filename,form="formatted") - -@@ -191,11 +191,11 @@ contains - fft_resolution(:) = resolution(:)-1 - halfLength = fft_resolution(c_X)/2+1 - ! allocate local buffer (used to save datain/dataout1 ==> in-place transform!!) -- alloc_local = fftw_mpi_local_size_2d_transposed(fft_resolution(c_Y),halfLength,main_comm,local_resolution(c_Y),& -+ alloc_local = fftwf_mpi_local_size_2d_transposed(fft_resolution(c_Y),halfLength,main_comm,local_resolution(c_Y),& - local_offset(c_Y),local_resolution(c_X),local_offset(c_X)); - - ! allocate local buffer (used to save datain/dataout1 ==> in-place transform!!) -- cbuffer1 = fftw_alloc_complex(alloc_local) -+ cbuffer1 = fftwf_alloc_complex(alloc_local) - - ! link rdatain1 and dataout1 to cbuffer, setting the right dimensions for each - call c_f_pointer(cbuffer1, rdatain1, [2*halfLength,local_resolution(c_Y)]) -@@ -203,17 +203,17 @@ contains - - ! second buffer used for backward transform. Used to copy dataout1 into dataout2 (input for backward transform and filter) - ! and to save (in-place) the transform of the second component of the velocity -- cbuffer2 = fftw_alloc_complex(alloc_local) -+ cbuffer2 = fftwf_alloc_complex(alloc_local) - - call c_f_pointer(cbuffer2, rdatain2, [2*halfLength,local_resolution(c_Y)]) - call c_f_pointer(cbuffer2, dataout2, [fft_resolution(c_Y),local_resolution(c_X)]) - - ! create MPI plans for in-place forward/backward DFT (note dimension reversal) -- plan_forward1 = fftw_mpi_plan_dft_r2c_2d(fft_resolution(c_Y), fft_resolution(c_X), rdatain1, dataout1, & -+ plan_forward1 = fftwf_mpi_plan_dft_r2c_2d(fft_resolution(c_Y), fft_resolution(c_X), rdatain1, dataout1, & - main_comm,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_OUT)) -- plan_backward1 = fftw_mpi_plan_dft_c2r_2d(fft_resolution(c_Y), fft_resolution(c_X), dataout1, rdatain1, & -+ plan_backward1 = fftwf_mpi_plan_dft_c2r_2d(fft_resolution(c_Y), fft_resolution(c_X), dataout1, rdatain1, & - main_comm,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_IN)) -- plan_backward2 = fftw_mpi_plan_dft_c2r_2d(fft_resolution(c_Y), fft_resolution(c_X), dataout2, rdatain2, & -+ plan_backward2 = fftwf_mpi_plan_dft_c2r_2d(fft_resolution(c_Y), fft_resolution(c_X), dataout2, rdatain2, & - main_comm,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_IN)) - - call computeKx(lengths(c_X)) -@@ -248,7 +248,7 @@ contains - !!$ end do - !!$ - ! compute transform (as many times as desired) -- call fftw_mpi_execute_dft_r2c(plan_forward1, rdatain1, dataout1) -+ call fftwf_mpi_execute_dft_r2c(plan_forward1, rdatain1, dataout1) - - !!$ do i = 1, fft_resolution(c_Y) - !!$ write(*,'(a,i5,a,16f10.4)') 'aaaa[',rank,'] ', dataout1(i,1:local_resolution(c_X)) -@@ -261,8 +261,8 @@ contains - real(mk),dimension(:,:),intent(inout) :: velocity_x,velocity_y - integer(C_INTPTR_T) :: i, j - -- call fftw_mpi_execute_dft_c2r(plan_backward1,dataout1,rdatain1) -- call fftw_mpi_execute_dft_c2r(plan_backward2,dataout2,rdatain2) -+ call fftwf_mpi_execute_dft_c2r(plan_backward1,dataout1,rdatain1) -+ call fftwf_mpi_execute_dft_c2r(plan_backward2,dataout2,rdatain2) - do j = 1, local_resolution(c_Y) - do i = 1, fft_resolution(c_X) - velocity_x(i,j) = rdatain1(i,j)*normFFT -@@ -288,7 +288,7 @@ contains - real(mk),dimension(:,:),intent(inout) :: omega - integer(C_INTPTR_T) :: i, j - -- call fftw_mpi_execute_dft_c2r(plan_backward1,dataout1,rdatain1) -+ call fftwf_mpi_execute_dft_c2r(plan_backward1,dataout1,rdatain1) - do j = 1, local_resolution(c_Y) - do i = 1, fft_resolution(c_X) - omega(i,j) = rdatain1(i,j)*normFFT -@@ -390,7 +390,7 @@ contains - subroutine filter_poisson_2d() - - integer(C_INTPTR_T) :: i, j -- complex(C_DOUBLE_COMPLEX) :: coeff -+ complex(C_FLOAT_COMPLEX) :: coeff - if(local_offset(c_X)==0) then - if(local_offset(c_Y) == 0) then - dataout1(1,1) = 0.0 -@@ -437,9 +437,9 @@ contains - - subroutine filter_diffusion_2d(nudt) - -- real(C_DOUBLE), intent(in) :: nudt -+ real(C_FLOAT), intent(in) :: nudt - integer(C_INTPTR_T) :: i, j -- complex(C_DOUBLE_COMPLEX) :: coeff -+ complex(C_FLOAT_COMPLEX) :: coeff - - do i = 1,local_resolution(c_X) - do j = 1, fft_resolution(c_Y) -@@ -452,20 +452,20 @@ contains - - !> Clean fftw context (free memory, plans ...) - subroutine cleanFFTW_2d() -- call fftw_destroy_plan(plan_forward1) -- call fftw_destroy_plan(plan_backward1) -- !call fftw_destroy_plan(plan_forward2) -- !call fftw_destroy_plan(plan_backward2) -- call fftw_free(cbuffer1) -- call fftw_free(cbuffer2) -- call fftw_mpi_cleanup() -+ call fftwf_destroy_plan(plan_forward1) -+ call fftwf_destroy_plan(plan_backward1) -+ !call fftwf_destroy_plan(plan_forward2) -+ !call fftwf_destroy_plan(plan_backward2) -+ call fftwf_free(cbuffer1) -+ call fftwf_free(cbuffer2) -+ call fftwf_mpi_cleanup() - deallocate(fft_resolution) - if(rank==0) close(21) - end subroutine cleanFFTW_2d - - subroutine fft2d_diagnostics(nbelem) - integer(C_INTPTR_T), intent(in) :: nbelem -- complex(C_DOUBLE_COMPLEX) :: memoryAllocated -+ complex(C_FLOAT_COMPLEX) :: memoryAllocated - memoryAllocated = real(nbelem*sizeof(memoryAllocated),mk)*1e-6 - write(*,'(a,i5,a,i12,f10.2)') '[',rank,'] size of each buffer (elements / memory in MB):', & - nbelem, memoryAllocated -@@ -499,10 +499,10 @@ contains - integer(C_INTPTR_T), dimension(2) :: n - - !> Field (real values) for fftw input -- real(C_DOUBLE), pointer :: rdatain1Many(:,:,:) -+ real(C_FLOAT), pointer :: rdatain1Many(:,:,:) - - ! init fftw mpi context -- call fftw_mpi_init() -+ call fftwf_mpi_init() - howmany = 1 - if(rank==0) open(unit=21,file=filename,form="formatted") - -@@ -514,12 +514,12 @@ contains - n(1) = fft_resolution(2) - n(2) = halfLength - ! allocate local buffer (used to save datain/dataout1 ==> in-place transform!!) -- alloc_local = fftw_mpi_local_size_many_transposed(2,n,howmany,FFTW_MPI_DEFAULT_BLOCK,& -+ alloc_local = fftwf_mpi_local_size_many_transposed(2,n,howmany,FFTW_MPI_DEFAULT_BLOCK,& - FFTW_MPI_DEFAULT_BLOCK,main_comm,local_resolution(c_Y),& - local_offset(c_Y),local_resolution(c_X),local_offset(c_X)); - - ! allocate local buffer (used to save datain/dataout1 ==> in-place transform!!) -- cbuffer1 = fftw_alloc_complex(alloc_local) -+ cbuffer1 = fftwf_alloc_complex(alloc_local) - - ! link rdatain1 and dataout1 to cbuffer, setting the right dimensions for each - call c_f_pointer(cbuffer1, rdatain1Many, [howmany,2*halfLength,local_resolution(c_Y)]) -@@ -527,17 +527,17 @@ contains - - ! second buffer used for backward transform. Used to copy dataout1 into dataout2 (input for backward transform and filter) - ! and to save (in-place) the transform of the second component of the velocity -- cbuffer2 = fftw_alloc_complex(alloc_local) -+ cbuffer2 = fftwf_alloc_complex(alloc_local) - - call c_f_pointer(cbuffer2, rdatain1Many, [howmany,2*halfLength,local_resolution(c_Y)]) - call c_f_pointer(cbuffer2, dataout2, [fft_resolution(c_Y),local_resolution(c_X)]) - - ! create MPI plans for in-place forward/backward DFT (note dimension reversal) -- plan_forward1 = fftw_mpi_plan_dft_r2c_2d(fft_resolution(c_Y), fft_resolution(c_X), rdatain1Many, dataout1, & -+ plan_forward1 = fftwf_mpi_plan_dft_r2c_2d(fft_resolution(c_Y), fft_resolution(c_X), rdatain1Many, dataout1, & - main_comm,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_OUT)) -- plan_backward1 = fftw_mpi_plan_dft_c2r_2d(fft_resolution(c_Y), fft_resolution(c_X), dataout1, rdatain1, & -+ plan_backward1 = fftwf_mpi_plan_dft_c2r_2d(fft_resolution(c_Y), fft_resolution(c_X), dataout1, rdatain1, & - main_comm,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_IN)) -- plan_backward2 = fftw_mpi_plan_dft_c2r_2d(fft_resolution(c_Y), fft_resolution(c_X), dataout2, rdatain2, & -+ plan_backward2 = fftwf_mpi_plan_dft_c2r_2d(fft_resolution(c_Y), fft_resolution(c_X), dataout2, rdatain2, & - main_comm,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_IN)) - - call computeKx(lengths(c_X)) -diff --git src/fftw/fft3d.f90 src/fftw/fft3d.f90 -index 1b06457..a857855 100755 ---- src/fftw/fft3d.f90 -+++ src/fftw/fft3d.f90 -@@ -40,15 +40,15 @@ module fft3d - type(C_PTR) :: cbuffer3 - !! Note Franck : check if local declarations of datain/out works and improve perfs. - !> Field (complex values) for fftw input -- complex(C_DOUBLE_COMPLEX), pointer :: datain1(:,:,:)=>NULL(), datain2(:,:,:)=>NULL(), datain3(:,:,:)=>NULL() -+ complex(C_FLOAT_COMPLEX), pointer :: datain1(:,:,:)=>NULL(), datain2(:,:,:)=>NULL(), datain3(:,:,:)=>NULL() - !> Field (real values) for fftw input (these are only pointers to the cbuffers) -- real(C_DOUBLE), pointer :: rdatain1(:,:,:)=>NULL() ,rdatain2(:,:,:)=>NULL() ,rdatain3(:,:,:)=>NULL() -+ real(C_FLOAT), pointer :: rdatain1(:,:,:)=>NULL() ,rdatain2(:,:,:)=>NULL() ,rdatain3(:,:,:)=>NULL() - !> Field (real values) for fftw input in the fftw-many case -- real(C_DOUBLE), pointer :: rdatain_many(:,:,:,:)=>NULL() -+ real(C_FLOAT), pointer :: rdatain_many(:,:,:,:)=>NULL() - !> Field (complex values) for fftw (forward) output -- complex(C_DOUBLE_COMPLEX), pointer :: dataout1(:,:,:)=>NULL() ,dataout2(:,:,:)=>NULL() ,dataout3(:,:,:)=>NULL() -+ complex(C_FLOAT_COMPLEX), pointer :: dataout1(:,:,:)=>NULL() ,dataout2(:,:,:)=>NULL() ,dataout3(:,:,:)=>NULL() - !> Field (complex values) for fftw (forward) output in the fftw-many case -- complex(C_DOUBLE_COMPLEX), pointer :: dataout_many(:,:,:,:)=>NULL() -+ complex(C_FLOAT_COMPLEX), pointer :: dataout_many(:,:,:,:)=>NULL() - !> GLOBAL number of points in each direction on which fft is applied (--> corresponds to "real" resolution - 1) - integer(C_INTPTR_T),pointer :: fft_resolution(:)=>NULL() - !> LOCAL number of points for fft -@@ -56,15 +56,15 @@ module fft3d - !> Offset in the direction of distribution - integer(c_INTPTR_T),dimension(3) :: local_offset - !> wave numbers for fft in x direction -- real(C_DOUBLE), pointer :: kx(:) -+ real(C_FLOAT), pointer :: kx(:) - !> wave numbers for fft in y direction -- real(C_DOUBLE), pointer :: ky(:) -+ real(C_FLOAT), pointer :: ky(:) - !> wave numbers for fft in z direction -- real(C_DOUBLE), pointer :: kz(:) -+ real(C_FLOAT), pointer :: kz(:) - !> log file for fftw - character(len=20),parameter :: filename ="parmesfftw.log" - !> normalization factor -- real(C_DOUBLE) :: normFFT -+ real(C_FLOAT) :: normFFT - !> true if we use fftw-many routines - logical :: manycase - !> true if all the allocation stuff for global variables has been done. -@@ -89,7 +89,7 @@ contains - if(is3DUpToDate) return - - ! init fftw mpi context -- call fftw_mpi_init() -+ call fftwf_mpi_init() - - if(rank==0) open(unit=21,file=filename,form="formatted") - -@@ -98,7 +98,7 @@ contains - fft_resolution(:) = resolution(:)-1 - - ! compute "optimal" size (according to fftw) for local data (warning : dimension reversal) -- alloc_local = fftw_mpi_local_size_3d_transposed(fft_resolution(c_Z),fft_resolution(c_Y),fft_resolution(c_X),main_comm,& -+ alloc_local = fftwf_mpi_local_size_3d_transposed(fft_resolution(c_Z),fft_resolution(c_Y),fft_resolution(c_X),main_comm,& - local_resolution(c_Z),local_offset(c_Z),local_resolution(c_Y),local_offset(c_Y)); - - ! Set a default value for c_X components. -@@ -106,35 +106,35 @@ contains - local_resolution(c_X) = fft_resolution(c_X) - - ! allocate local buffer (used to save datain/dataout ==> in-place transform!!) -- cbuffer1 = fftw_alloc_complex(alloc_local) -+ cbuffer1 = fftwf_alloc_complex(alloc_local) - ! link datain and dataout to cbuffer, setting the right dimensions for each - call c_f_pointer(cbuffer1, datain1, [fft_resolution(c_X),fft_resolution(c_Y),local_resolution(c_Z)]) - call c_f_pointer(cbuffer1, dataout1, [fft_resolution(c_X),fft_resolution(c_Z),local_resolution(c_Y)]) - - ! second buffer used for backward transform. Used to copy dataout into dataout2 (input for backward transform and filter) - ! and to save (in-place) the transform of the second component of the velocity -- cbuffer2 = fftw_alloc_complex(alloc_local) -+ cbuffer2 = fftwf_alloc_complex(alloc_local) - call c_f_pointer(cbuffer2, datain2, [fft_resolution(c_X),fft_resolution(c_Y),local_resolution(c_Z)]) - call c_f_pointer(cbuffer2, dataout2, [fft_resolution(c_X),fft_resolution(c_Z),local_resolution(c_Y)]) - - ! second buffer used for backward transform. Used to copy dataout into dataout2 (input for backward transform and filter) - ! and to save (in-place) the transform of the second component of the velocity -- cbuffer3 = fftw_alloc_complex(alloc_local) -+ cbuffer3 = fftwf_alloc_complex(alloc_local) - call c_f_pointer(cbuffer3, datain3, [fft_resolution(c_X),fft_resolution(c_Y),local_resolution(c_Z)]) - call c_f_pointer(cbuffer3, dataout3, [fft_resolution(c_X),fft_resolution(c_Z),local_resolution(c_Y)]) - - ! create MPI plan for in-place forward/backward DFT (note dimension reversal) -- plan_forward1 = fftw_mpi_plan_dft_3d(fft_resolution(c_Z), fft_resolution(c_Y), fft_resolution(c_X),datain1,dataout1,& -+ plan_forward1 = fftwf_mpi_plan_dft_3d(fft_resolution(c_Z), fft_resolution(c_Y), fft_resolution(c_X),datain1,dataout1,& - main_comm,FFTW_FORWARD,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_OUT)) -- plan_backward1 = fftw_mpi_plan_dft_3d(fft_resolution(c_Z),fft_resolution(c_Y),fft_resolution(c_X),dataout1,datain1,& -+ plan_backward1 = fftwf_mpi_plan_dft_3d(fft_resolution(c_Z),fft_resolution(c_Y),fft_resolution(c_X),dataout1,datain1,& - main_comm,FFTW_BACKWARD,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_IN)) -- plan_forward2 = fftw_mpi_plan_dft_3d(fft_resolution(c_Z), fft_resolution(c_Y), fft_resolution(c_X),datain2,dataout2,& -+ plan_forward2 = fftwf_mpi_plan_dft_3d(fft_resolution(c_Z), fft_resolution(c_Y), fft_resolution(c_X),datain2,dataout2,& - main_comm,FFTW_FORWARD,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_OUT)) -- plan_backward2 = fftw_mpi_plan_dft_3d(fft_resolution(c_Z),fft_resolution(c_Y),fft_resolution(c_X),dataout2,datain2,& -+ plan_backward2 = fftwf_mpi_plan_dft_3d(fft_resolution(c_Z),fft_resolution(c_Y),fft_resolution(c_X),dataout2,datain2,& - main_comm,FFTW_BACKWARD,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_IN)) -- plan_forward3 = fftw_mpi_plan_dft_3d(fft_resolution(c_Z), fft_resolution(c_Y), fft_resolution(c_X),datain3,dataout3,& -+ plan_forward3 = fftwf_mpi_plan_dft_3d(fft_resolution(c_Z), fft_resolution(c_Y), fft_resolution(c_X),datain3,dataout3,& - main_comm,FFTW_FORWARD,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_OUT)) -- plan_backward3 = fftw_mpi_plan_dft_3d(fft_resolution(c_Z),fft_resolution(c_Y),fft_resolution(c_X),dataout3,datain3,& -+ plan_backward3 = fftwf_mpi_plan_dft_3d(fft_resolution(c_Z),fft_resolution(c_Y),fft_resolution(c_X),dataout3,datain3,& - main_comm,FFTW_BACKWARD,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_IN)) - - call computeKx(lengths(c_X)) -@@ -173,17 +173,17 @@ contains - end do - end do - ! compute transform (as many times as desired) -- call fftw_mpi_execute_dft(plan_forward1, datain1, dataout1) -- call fftw_mpi_execute_dft(plan_forward2, datain2, dataout2) -- call fftw_mpi_execute_dft(plan_forward3, datain3, dataout3) -+ call fftwf_mpi_execute_dft(plan_forward1, datain1, dataout1) -+ call fftwf_mpi_execute_dft(plan_forward2, datain2, dataout2) -+ call fftwf_mpi_execute_dft(plan_forward3, datain3, dataout3) - - ! apply poisson filter - call filter_poisson_3d() - - ! inverse transform to retrieve velocity -- call fftw_mpi_execute_dft(plan_backward1, dataout1,datain1) -- call fftw_mpi_execute_dft(plan_backward2,dataout2,datain2) -- call fftw_mpi_execute_dft(plan_backward3,dataout3,datain3) -+ call fftwf_mpi_execute_dft(plan_backward1, dataout1,datain1) -+ call fftwf_mpi_execute_dft(plan_backward2,dataout2,datain2) -+ call fftwf_mpi_execute_dft(plan_backward3,dataout3,datain3) - do k =1, local_resolution(c_Z) - do j = 1, fft_resolution(c_Y) - do i = 1, fft_resolution(c_X) -@@ -213,7 +213,7 @@ contains - if(is3DUpToDate) return - - ! init fftw mpi context -- call fftw_mpi_init() -+ call fftwf_mpi_init() - - if(rank==0) open(unit=21,file=filename,form="formatted") - allocate(fft_resolution(3)) -@@ -221,7 +221,7 @@ contains - halfLength = fft_resolution(c_X)/2+1 - - ! compute "optimal" size (according to fftw) for local data (warning : dimension reversal) -- alloc_local = fftw_mpi_local_size_3d_transposed(fft_resolution(c_Z),fft_resolution(c_Y),halfLength,& -+ alloc_local = fftwf_mpi_local_size_3d_transposed(fft_resolution(c_Z),fft_resolution(c_Y),halfLength,& - main_comm,local_resolution(c_Z),local_offset(c_Z),local_resolution(c_Y),local_offset(c_Y)); - - ! init c_X part. This is required to compute kx with the same function in 2d and 3d cases. -@@ -229,9 +229,9 @@ contains - local_resolution(c_X) = halfLength - - ! allocate local buffer (used to save datain/dataout ==> in-place transform!!) -- cbuffer1 = fftw_alloc_complex(alloc_local) -- cbuffer2 = fftw_alloc_complex(alloc_local) -- cbuffer3 = fftw_alloc_complex(alloc_local) -+ cbuffer1 = fftwf_alloc_complex(alloc_local) -+ cbuffer2 = fftwf_alloc_complex(alloc_local) -+ cbuffer3 = fftwf_alloc_complex(alloc_local) - - ! link rdatain and dataout to cbuffer, setting the right dimensions for each - call c_f_pointer(cbuffer1, rdatain1, [2*halfLength,fft_resolution(c_Y),local_resolution(c_Z)]) -@@ -246,17 +246,17 @@ contains - rdatain3 = 0.0 - - ! create MPI plans for in-place forward/backward DFT (note dimension reversal) -- plan_forward1 = fftw_mpi_plan_dft_r2c_3d(fft_resolution(c_Z),fft_resolution(c_Y), fft_resolution(c_X), rdatain1, dataout1, & -+ plan_forward1 = fftwf_mpi_plan_dft_r2c_3d(fft_resolution(c_Z),fft_resolution(c_Y), fft_resolution(c_X), rdatain1, dataout1, & - main_comm,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_OUT)) -- plan_backward1 = fftw_mpi_plan_dft_c2r_3d(fft_resolution(c_Z),fft_resolution(c_Y), fft_resolution(c_X), dataout1, rdatain1, & -+ plan_backward1 = fftwf_mpi_plan_dft_c2r_3d(fft_resolution(c_Z),fft_resolution(c_Y), fft_resolution(c_X), dataout1, rdatain1, & - main_comm,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_IN)) -- plan_forward2 = fftw_mpi_plan_dft_r2c_3d(fft_resolution(c_Z),fft_resolution(c_Y), fft_resolution(c_X), rdatain2, dataout2, & -+ plan_forward2 = fftwf_mpi_plan_dft_r2c_3d(fft_resolution(c_Z),fft_resolution(c_Y), fft_resolution(c_X), rdatain2, dataout2, & - main_comm,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_OUT)) -- plan_backward2 = fftw_mpi_plan_dft_c2r_3d(fft_resolution(c_Z),fft_resolution(c_Y), fft_resolution(c_X), dataout2, rdatain2, & -+ plan_backward2 = fftwf_mpi_plan_dft_c2r_3d(fft_resolution(c_Z),fft_resolution(c_Y), fft_resolution(c_X), dataout2, rdatain2, & - main_comm,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_IN)) -- plan_forward3 = fftw_mpi_plan_dft_r2c_3d(fft_resolution(c_Z),fft_resolution(c_Y), fft_resolution(c_X), rdatain3, dataout3, & -+ plan_forward3 = fftwf_mpi_plan_dft_r2c_3d(fft_resolution(c_Z),fft_resolution(c_Y), fft_resolution(c_X), rdatain3, dataout3, & - main_comm,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_OUT)) -- plan_backward3 = fftw_mpi_plan_dft_c2r_3d(fft_resolution(c_Z),fft_resolution(c_Y), fft_resolution(c_X), dataout3, rdatain3, & -+ plan_backward3 = fftwf_mpi_plan_dft_c2r_3d(fft_resolution(c_Z),fft_resolution(c_Y), fft_resolution(c_X), dataout3, rdatain3, & - main_comm,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_IN)) - - call computeKx(lengths(c_X)) -@@ -279,7 +279,7 @@ contains - - real(mk),dimension(:,:,:),intent(in) :: omega_x,omega_y,omega_z - integer, dimension(3), intent(in) :: ghosts -- real(mk) :: start -+ real(8) :: start - integer(C_INTPTR_T) :: i,j,k, ig, jg, kg - - ! ig, jg, kg are used to take into account -@@ -301,9 +301,9 @@ contains - - ! compute transforms for each component - start = MPI_WTIME() -- call fftw_mpi_execute_dft_r2c(plan_forward1, rdatain1, dataout1) -- call fftw_mpi_execute_dft_r2c(plan_forward2, rdatain2, dataout2) -- call fftw_mpi_execute_dft_r2c(plan_forward3, rdatain3, dataout3) -+ call fftwf_mpi_execute_dft_r2c(plan_forward1, rdatain1, dataout1) -+ call fftwf_mpi_execute_dft_r2c(plan_forward2, rdatain2, dataout2) -+ call fftwf_mpi_execute_dft_r2c(plan_forward3, rdatain3, dataout3) - !!print *, "r2c time = ", MPI_WTIME() - start - - end subroutine r2c_3d -@@ -316,12 +316,12 @@ contains - subroutine c2r_3d(velocity_x,velocity_y,velocity_z, ghosts) - real(mk),dimension(:,:,:),intent(inout) :: velocity_x,velocity_y,velocity_z - integer, dimension(3), intent(in) :: ghosts -- real(mk) :: start -+ real(8) :: start - integer(C_INTPTR_T) :: i,j,k, ig, jg, kg - start = MPI_WTIME() -- call fftw_mpi_execute_dft_c2r(plan_backward1,dataout1,rdatain1) -- call fftw_mpi_execute_dft_c2r(plan_backward2,dataout2,rdatain2) -- call fftw_mpi_execute_dft_c2r(plan_backward3,dataout3,rdatain3) -+ call fftwf_mpi_execute_dft_c2r(plan_backward1,dataout1,rdatain1) -+ call fftwf_mpi_execute_dft_c2r(plan_backward2,dataout2,rdatain2) -+ call fftwf_mpi_execute_dft_c2r(plan_backward3,dataout3,rdatain3) - !! print *, "c2r time : ", MPI_WTIME() -start - ! copy back to velocity and normalisation - do k =1, local_resolution(c_Z) -@@ -346,7 +346,7 @@ contains - - real(mk),dimension(:,:,:),intent(in) :: omega - integer, dimension(3), intent(in) :: ghosts -- real(mk) :: start -+ real(8) :: start - integer(C_INTPTR_T) :: i,j,k, ig, jg, kg - - ! ig, jg, kg are used to take into account -@@ -366,7 +366,7 @@ contains - - ! compute transforms for each component - start = MPI_WTIME() -- call fftw_mpi_execute_dft_r2c(plan_forward1, rdatain1, dataout1) -+ call fftwf_mpi_execute_dft_r2c(plan_forward1, rdatain1, dataout1) - !!print *, "r2c time = ", MPI_WTIME() - start - - end subroutine r2c_scalar_3d -@@ -377,10 +377,10 @@ contains - subroutine c2r_scalar_3d(omega, ghosts) - real(mk),dimension(:,:,:),intent(inout) :: omega - integer, dimension(3), intent(in) :: ghosts -- real(mk) :: start -+ real(8) :: start - integer(C_INTPTR_T) :: i,j,k, ig, jg, kg - start = MPI_WTIME() -- call fftw_mpi_execute_dft_c2r(plan_backward1,dataout1,rdatain1) -+ call fftwf_mpi_execute_dft_c2r(plan_backward1,dataout1,rdatain1) - !! print *, "c2r time : ", MPI_WTIME() -start - ! copy back to velocity and normalisation - do k =1, local_resolution(c_Z) -@@ -412,7 +412,7 @@ contains - integer(C_INTPTR_T),dimension(3) :: n - - ! init fftw mpi context -- call fftw_mpi_init() -+ call fftwf_mpi_init() - blocksize = FFTW_MPI_DEFAULT_BLOCK - if(rank==0) open(unit=21,file=filename,form="formatted") - allocate(fft_resolution(3)) -@@ -423,7 +423,7 @@ contains - n(3) = halfLength - howmany = 3 - ! compute "optimal" size (according to fftw) for local data (warning : dimension reversal) -- alloc_local = fftw_mpi_local_size_many_transposed(3,n,howmany,blocksize,blocksize,& -+ alloc_local = fftwf_mpi_local_size_many_transposed(3,n,howmany,blocksize,blocksize,& - main_comm,local_resolution(c_Z),local_offset(c_Z),local_resolution(c_Y),local_offset(c_Y)); - - ! init c_X part. This is required to compute kx with the same function in 2d and 3d cases. -@@ -431,7 +431,7 @@ contains - local_resolution(c_X) = halfLength - - ! allocate local buffer (used to save datain/dataout ==> in-place transform!!) -- cbuffer1 = fftw_alloc_complex(alloc_local) -+ cbuffer1 = fftwf_alloc_complex(alloc_local) - - ! link rdatain and dataout to cbuffer, setting the right dimensions for each - call c_f_pointer(cbuffer1, rdatain_many, [howmany,2*halfLength,fft_resolution(c_Y),local_resolution(c_Z)]) -@@ -440,9 +440,9 @@ contains - ! create MPI plans for in-place forward/backward DFT (note dimension reversal) - n(3) = fft_resolution(c_X) - -- plan_forward1 = fftw_mpi_plan_many_dft_r2c(3,n,howmany,blocksize,blocksize, rdatain_many, dataout_many, & -+ plan_forward1 = fftwf_mpi_plan_many_dft_r2c(3,n,howmany,blocksize,blocksize, rdatain_many, dataout_many, & - main_comm,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_OUT)) -- plan_backward1 = fftw_mpi_plan_many_dft_c2r(3,n,howmany,blocksize,blocksize, dataout_many, rdatain_many, & -+ plan_backward1 = fftwf_mpi_plan_many_dft_c2r(3,n,howmany,blocksize,blocksize, dataout_many, rdatain_many, & - main_comm,ior(FFTW_MEASURE,FFTW_MPI_TRANSPOSED_IN)) - call computeKx(lengths(c_X)) - call computeKy(lengths(c_Y)) -@@ -464,7 +464,7 @@ contains - subroutine r2c_3d_many(omega_x,omega_y,omega_z) - - real(mk),dimension(:,:,:),intent(in) :: omega_x,omega_y,omega_z -- real(mk) :: start -+ real(8) :: start - integer(C_INTPTR_T) :: i,j,k - - ! init -@@ -480,7 +480,7 @@ contains - - ! compute transform (as many times as desired) - start = MPI_WTIME() -- call fftw_mpi_execute_dft_r2c(plan_forward1, rdatain_many, dataout_many) -+ call fftwf_mpi_execute_dft_r2c(plan_forward1, rdatain_many, dataout_many) - !! print *, "r2c time = ", MPI_WTIME() - start - - end subroutine r2c_3d_many -@@ -491,11 +491,11 @@ contains - !! @param[in,out] velocity_z 3d scalar field, z-component of the output vector field - subroutine c2r_3d_many(velocity_x,velocity_y,velocity_z) - real(mk),dimension(:,:,:),intent(inout) :: velocity_x,velocity_y,velocity_z -- real(mk) :: start -+ real(8) :: start - integer(C_INTPTR_T) :: i,j,k - - start = MPI_WTIME() -- call fftw_mpi_execute_dft_c2r(plan_backward1,dataout_many,rdatain_many) -+ call fftwf_mpi_execute_dft_c2r(plan_backward1,dataout_many,rdatain_many) - !! print *, "c2r time : ", MPI_WTIME() -start - do k =1, local_resolution(c_Z) - do j = 1, fft_resolution(c_Y) -@@ -536,7 +536,7 @@ contains - !> Computation of frequencies coeff, over distributed direction(s) - !> @param lengths size of the domain - subroutine computeKy(length) -- real(C_DOUBLE), intent(in) :: length -+ real(C_FLOAT), intent(in) :: length - - !! Local loops indices - integer(C_INTPTR_T) :: i -@@ -589,8 +589,8 @@ contains - subroutine filter_poisson_3d() - - integer(C_INTPTR_T) :: i,j,k -- complex(C_DOUBLE_COMPLEX) :: coeff -- complex(C_DOUBLE_COMPLEX) :: buffer1,buffer2 -+ complex(C_FLOAT_COMPLEX) :: coeff -+ complex(C_FLOAT_COMPLEX) :: buffer1,buffer2 - - ! Set first coeff (check for "all freq = 0" case) - if(local_offset(c_Y) == 0) then -@@ -648,10 +648,10 @@ contains - !! @param[in] nudt \f$ \nu\times dt\f$, diffusion coefficient times current time step - subroutine filter_curl_diffusion_3d(nudt) - -- real(C_DOUBLE), intent(in) :: nudt -+ real(C_FLOAT), intent(in) :: nudt - integer(C_INTPTR_T) :: i,j,k -- complex(C_DOUBLE_COMPLEX) :: coeff -- complex(C_DOUBLE_COMPLEX) :: buffer1,buffer2 -+ complex(C_FLOAT_COMPLEX) :: coeff -+ complex(C_FLOAT_COMPLEX) :: buffer1,buffer2 - - !! mind the transpose -> index inversion between y and z - do j = 1,local_resolution(c_Y) -@@ -674,9 +674,9 @@ contains - !! @param[in] nudt \f$ \nu\times dt\f$, diffusion coefficient times current time step - subroutine filter_diffusion_3d(nudt) - -- real(C_DOUBLE), intent(in) :: nudt -+ real(C_FLOAT), intent(in) :: nudt - integer(C_INTPTR_T) :: i,j,k -- complex(C_DOUBLE_COMPLEX) :: coeff -+ complex(C_FLOAT_COMPLEX) :: coeff - - !! mind the transpose -> index inversion between y and z - do j = 1,local_resolution(c_Y) -@@ -697,8 +697,8 @@ contains - subroutine filter_curl_3d() - - integer(C_INTPTR_T) :: i,j,k -- complex(C_DOUBLE_COMPLEX) :: coeff -- complex(C_DOUBLE_COMPLEX) :: buffer1,buffer2 -+ complex(C_FLOAT_COMPLEX) :: coeff -+ complex(C_FLOAT_COMPLEX) :: buffer1,buffer2 - - !! mind the transpose -> index inversion between y and z - do j = 1,local_resolution(c_Y) -@@ -721,8 +721,8 @@ contains - subroutine filter_projection_om_3d() - - integer(C_INTPTR_T) :: i,j,k -- complex(C_DOUBLE_COMPLEX) :: coeff -- complex(C_DOUBLE_COMPLEX) :: buffer1,buffer2,buffer3 -+ complex(C_FLOAT_COMPLEX) :: coeff -+ complex(C_FLOAT_COMPLEX) :: buffer1,buffer2,buffer3 - - ! Set first coeff (check for "all freq = 0" case) - if(local_offset(c_Y) == 0) then -@@ -783,9 +783,9 @@ contains - !! @param[in] dxf, dyf, dzf: grid filter size = domainLength/(CoarseRes-1) - subroutine filter_multires_om_3d(dxf, dyf, dzf) - -- real(C_DOUBLE), intent(in) :: dxf, dyf, dzf -+ real(C_FLOAT), intent(in) :: dxf, dyf, dzf - integer(C_INTPTR_T) :: i,j,k -- real(C_DOUBLE) :: kxc, kyc, kzc -+ real(C_FLOAT) :: kxc, kyc, kzc - - kxc = pi / dxf - kyc = pi / dyf -@@ -810,7 +810,7 @@ contains - !! pressure from velocity in the Fourier space - subroutine filter_pressure_3d() - integer(C_INTPTR_T) :: i,j,k -- complex(C_DOUBLE_COMPLEX) :: coeff -+ complex(C_FLOAT_COMPLEX) :: coeff - - ! Set first coeff (check for "all freq = 0" case) - if(local_offset(c_Y) == 0) then -@@ -851,8 +851,8 @@ contains - subroutine filter_poisson_3d_many() - - integer(C_INTPTR_T) :: i,j,k -- complex(C_DOUBLE_COMPLEX) :: coeff -- complex(C_DOUBLE_COMPLEX) :: buffer1,buffer2 -+ complex(C_FLOAT_COMPLEX) :: coeff -+ complex(C_FLOAT_COMPLEX) :: buffer1,buffer2 - - ! Set first coeff (check for "all freq = 0" case) - if(local_offset(c_Y) == 0) then -@@ -908,10 +908,10 @@ contains - !! @param[in] nudt \f$ \nu\times dt\f$, diffusion coefficient times current time step - subroutine filter_diffusion_3d_many(nudt) - -- real(C_DOUBLE), intent(in) :: nudt -+ real(C_FLOAT), intent(in) :: nudt - integer(C_INTPTR_T) :: i,j,k -- complex(C_DOUBLE_COMPLEX) :: coeff -- complex(C_DOUBLE_COMPLEX) :: buffer1,buffer2 -+ complex(C_FLOAT_COMPLEX) :: coeff -+ complex(C_FLOAT_COMPLEX) :: buffer1,buffer2 - - !! mind the transpose -> index inversion between y and z - do j = 1,local_resolution(c_Y) -@@ -931,18 +931,18 @@ contains - - !> Clean fftw context (free memory, plans ...) - subroutine cleanFFTW_3d() -- call fftw_destroy_plan(plan_forward1) -- call fftw_destroy_plan(plan_backward1) -+ call fftwf_destroy_plan(plan_forward1) -+ call fftwf_destroy_plan(plan_backward1) - if(.not.manycase) then -- call fftw_destroy_plan(plan_forward2) -- call fftw_destroy_plan(plan_backward2) -- call fftw_destroy_plan(plan_forward3) -- call fftw_destroy_plan(plan_backward3) -- call fftw_free(cbuffer2) -- call fftw_free(cbuffer3) -+ call fftwf_destroy_plan(plan_forward2) -+ call fftwf_destroy_plan(plan_backward2) -+ call fftwf_destroy_plan(plan_forward3) -+ call fftwf_destroy_plan(plan_backward3) -+ call fftwf_free(cbuffer2) -+ call fftwf_free(cbuffer3) - endif -- call fftw_free(cbuffer1) -- call fftw_mpi_cleanup() -+ call fftwf_free(cbuffer1) -+ call fftwf_mpi_cleanup() - deallocate(fft_resolution) - deallocate(kx,ky,kz) - if(rank==0) close(21) -@@ -953,7 +953,7 @@ contains - integer(C_INTPTR_T), intent(in) :: nbelem - ! number of buffers used for fftw - integer, optional,intent(in) :: howmany -- complex(C_DOUBLE_COMPLEX) :: memoryAllocated -+ complex(C_FLOAT_COMPLEX) :: memoryAllocated - - integer :: nbFields - if(present(howmany)) then -diff --git src/main/main.f90 src/main/main.f90 -index 38cc6a5..0fc8f5f 100755 ---- src/main/main.f90 -+++ src/main/main.f90 -@@ -9,7 +9,7 @@ use vectorcalculus - implicit none - - integer :: info --real(mk) :: start, end -+real(8) :: start, end - - !complex(mk), dimension(resolution(1),resolution(2)) :: omega,velocity_x,velocity_y - call MPI_Init(info) -@@ -116,7 +116,8 @@ contains - real(mk),dimension(3) :: lengths,step - integer, dimension(3) :: ghosts_v, ghosts_w - integer(C_INTPTR_T),dimension(3) :: nfft,offset -- real(mk) :: error,start -+ real(mk) :: error -+ real(8) :: start - logical :: ok - - if (rank==0) print *, " ======= Test 3D Poisson (r2c) solver for resolution ", resolution -diff --git src/scalesInterface/precision_tools.f90 src/scalesInterface/precision_tools.f90 -index 5dacf3f..4ae1a6a 100644 ---- src/scalesInterface/precision_tools.f90 -+++ src/scalesInterface/precision_tools.f90 -@@ -20,15 +20,15 @@ - !------------------------------------------------------------------------------ - - MODULE precision_tools -- use mpi, only: MPI_DOUBLE_PRECISION -+ use mpi, only: MPI_REAL - implicit None - - !> Floats precision - INTEGER, PARAMETER :: SP = kind(1.0) - INTEGER, PARAMETER :: DP = kind(1.0d0) -- INTEGER, PARAMETER :: WP = DP -+ INTEGER, PARAMETER :: WP = SP - !> the MPI type for REAL exchanges in simple or double precision -- INTEGER, parameter :: MPI_REAL_WP = MPI_DOUBLE_PRECISION -+ INTEGER, parameter :: MPI_REAL_WP = MPI_REAL - REAL(WP), PRIVATE :: sample_real_at_WP - REAL(WP), PARAMETER :: MAX_REAL_WP = HUGE(sample_real_at_WP) - INTEGER, PRIVATE :: sample_int diff --git a/todo.org b/todo.org index 2dda25cb2..bc29ee25e 100644 --- a/todo.org +++ b/todo.org @@ -1,4 +1,11 @@ -Bilan réunion du 15/02/2012 +========= +todo list +========= +Items should contain a brief description and a date of completion. + +* Redistributes MPI tag should depend on variables names. It prevent from mixing simultaneous async messages. + +* update/clean this file ... * Tests operations sur tableaux (Franck) ** tests numpy : timer + mémoire *** operations algebriques linéaires -- GitLab