diff --git a/src/auxval.F90 b/src/auxval.F90 index 07f7acde91e4074425cbd213350ed23a7b5f5391..6c281046b4d302f841de14e86335606c7266a894 100644 --- a/src/auxval.F90 +++ b/src/auxval.F90 @@ -13,9 +13,9 @@ subroutine auxval CALL init_grid_distr_and_plans(Nr,Nz) - CALL set_krgrid + CALL set_krgrid ! MPI Distributed dimension - CALL set_kzgrid ! Distributed dimension + CALL set_kzgrid CALL set_pj @@ -26,7 +26,6 @@ subroutine auxval IF (my_id .EQ. i_) WRITE (*,'(I2,A9,I3,A8,I3,A8,I3,A8,I3,A15,I6)') & i_,': ikrs = ', ikrs, ' ikre = ', ikre, 'ikzs = ', ikzs, ' ikze = ', ikze, & 'alloc_local = ', alloc_local_1+alloc_local_2 - CALL mpi_barrier(MPI_COMM_WORLD, ierr) ENDDO END SUBROUTINE auxval diff --git a/src/control.F90 b/src/control.F90 index d95e890f67a86c48e175641660375ae368702ea0..a3f251e5597c379c4838072ce0e0f6516d81215d 100644 --- a/src/control.F90 +++ b/src/control.F90 @@ -9,42 +9,48 @@ SUBROUTINE control !________________________________________________________________________________ ! 1. Prologue ! 1.1 Initialize the parallel environment - IF (my_id .EQ. 1) WRITE(*,*) 'Initialize MPI...' + IF (my_id .EQ. 0) WRITE(*,*) 'Initialize MPI...' CALL ppinit - IF (my_id .EQ. 1) WRITE(*,'(a/)') '...MPI initialized' + IF (my_id .EQ. 0) WRITE(*,'(a/)') '...MPI initialized' CALL daytim('Start at ') ! 1.2 Define data specific to run - IF (my_id .EQ. 1) WRITE(*,*) 'Load basic data...' + IF (my_id .EQ. 0) WRITE(*,*) 'Load basic data...' CALL basic_data - IF (my_id .EQ. 1) WRITE(*,'(a/)') '...basic data loaded.' + CALL mpi_barrier(MPI_COMM_WORLD, ierr) + IF (my_id .EQ. 0) WRITE(*,'(a/)') '...basic data loaded.' ! 1.3 Read input parameters from input file - IF (my_id .EQ. 1) WRITE(*,*) 'Read input parameters...' + IF (my_id .EQ. 0) WRITE(*,*) 'Read input parameters...' CALL readinputs - IF (my_id .EQ. 1) WRITE(*,'(a/)') '...input parameters read' + CALL mpi_barrier(MPI_COMM_WORLD, ierr) + IF (my_id .EQ. 0) WRITE(*,'(a/)') '...input parameters read' ! 1.4 Set auxiliary values (allocate arrays, set grid, ...) - IF (my_id .EQ. 1) WRITE(*,*) 'Calculate auxval...' + IF (my_id .EQ. 0) WRITE(*,*) 'Calculate auxval...' CALL auxval - IF (my_id .EQ. 1) WRITE(*,'(a/)') '...auxval calculated' + CALL mpi_barrier(MPI_COMM_WORLD, ierr) + IF (my_id .EQ. 0) WRITE(*,'(a/)') '...auxval calculated' ! 1.5 Initial conditions - IF (my_id .EQ. 1) WRITE(*,*) 'Create initial state...' + IF (my_id .EQ. 0) WRITE(*,*) 'Create initial state...' CALL inital - IF (my_id .EQ. 1) WRITE(*,'(a/)') '...initial state created' + CALL mpi_barrier(MPI_COMM_WORLD, ierr) + IF (my_id .EQ. 0) WRITE(*,'(a/)') '...initial state created' ! 1.6 Initial diagnostics - IF (my_id .EQ. 1) WRITE(*,*) 'Initial diagnostics...' + IF (my_id .EQ. 0) WRITE(*,*) 'Initial diagnostics...' CALL diagnose(0) - IF (my_id .EQ. 1) WRITE(*,'(a/)') '...initial diagnostics done' + CALL mpi_barrier(MPI_COMM_WORLD, ierr) + IF (my_id .EQ. 0) WRITE(*,'(a/)') '...initial diagnostics done' CALL FLUSH(stdout) + CALL mpi_barrier(MPI_COMM_WORLD, ierr) !________________________________________________________________________________ - IF (my_id .EQ. 1) WRITE(*,*) 'Time integration loop..' + IF (my_id .EQ. 0) WRITE(*,*) 'Time integration loop..' !________________________________________________________________________________ ! 2. Main loop DO @@ -68,15 +74,14 @@ SUBROUTINE control END DO - CALL mpi_barrier(MPI_COMM_WORLD,ierr) - IF (my_id .EQ. 1) WRITE(*,'(a/)') '...time integration done' + IF (my_id .EQ. 0) WRITE(*,'(a/)') '...time integration done' !________________________________________________________________________________ ! 9. Epilogue CALL diagnose(-1) CALL endrun - IF (my_id .EQ. 1) CALL daytim('Done at ') + IF (my_id .EQ. 0) CALL daytim('Done at ') CALL ppexit diff --git a/src/fourier_mod.F90 b/src/fourier_mod.F90 index 528e21ddede3301b8f2b3a8b4baa928f19c2b2c9..2634028d5e32c0ded58286e458cd65b4d41162f0 100644 --- a/src/fourier_mod.F90 +++ b/src/fourier_mod.F90 @@ -20,7 +20,12 @@ MODULE fourier type(C_PTR) , PUBLIC :: planf, planb integer(C_INTPTR_T) :: i, ix, iy integer(C_INTPTR_T), PUBLIC :: alloc_local_1, alloc_local_2 - integer(C_INTPTR_T) :: NR_, NZ_ + integer(C_INTPTR_T) :: NR_, NZ_, NR_halved + + ! many plan data variables + integer(C_INTPTR_T) :: howmany=9 ! numer of eleemnt of the tensor + integer :: rank=3 ! rank of the transform + integer(C_INTPTR_T), dimension(2) :: fft_dims ! array containing data extent CONTAINS @@ -29,9 +34,12 @@ MODULE fourier INTEGER, INTENT(IN) :: Nr,Nz NR_ = Nr; NZ_ = Nz + NR_halved = NR_/2 + 1 + !! Complex arrays F, G ! Compute the room to allocate - alloc_local_1 = fftw_mpi_local_size_2d(NR_/2 + 1, NZ_, MPI_COMM_WORLD, local_nkr, local_nkr_offset) + alloc_local_1 = fftw_mpi_local_size_2d(NR_halved, NZ_, MPI_COMM_WORLD, local_nkr, local_nkr_offset) + ! alloc_local_1 = fftw_mpi_local_size_2d_many(2, NR_halved, NZ_, MPI_COMM_WORLD, local_nkr, local_nkr_offset) ! Initalize pointers to this room cdatac_f = fftw_alloc_complex(alloc_local_1) cdatac_g = fftw_alloc_complex(alloc_local_1) @@ -41,11 +49,15 @@ MODULE fourier call c_f_pointer(cdatac_g, cmpx_data_g, [NZ_ ,local_nkr]) call c_f_pointer(cdatac_c, cmpx_data_c, [NZ_ ,local_nkr]) - alloc_local_2 = fftw_mpi_local_size_2d(NZ_, NR_/2 + 1, MPI_COMM_WORLD, local_nz, local_nz_offset) - + !! Real arrays iFFT(F), iFFT(G) + ! Compute the room to allocate + alloc_local_2 = fftw_mpi_local_size_2d(NZ_, NR_halved, MPI_COMM_WORLD, local_nz, local_nz_offset) + ! alloc_local_2 = fftw_mpi_local_size_2d_many(2, NZ_, NR_halved, MPI_COMM_WORLD, local_nz, local_nz_offset) + ! Initalize pointers to this room cdatar_f = fftw_alloc_real(2*alloc_local_2) cdatar_g = fftw_alloc_real(2*alloc_local_2) cdatar_c = fftw_alloc_real(2*alloc_local_2) + ! Initalize the arrays with the rooms pointed call c_f_pointer(cdatar_f, real_data_f, [2*(NR_/2 + 1),local_nz]) call c_f_pointer(cdatar_g, real_data_g, [2*(NR_/2 + 1),local_nz]) call c_f_pointer(cdatar_c, real_data_c, [2*(NR_/2 + 1),local_nz]) @@ -59,13 +71,6 @@ MODULE fourier stop end if - DO ix = 0,num_procs-1 - CALL mpi_barrier(MPI_COMM_WORLD, ierr) - IF (my_id .EQ. ix) print *, my_id,': alloc_local = ', alloc_local_1+alloc_local_2 - CALL mpi_barrier(MPI_COMM_WORLD, ierr) - ENDDO - - END SUBROUTINE init_grid_distr_and_plans diff --git a/src/inital.F90 b/src/inital.F90 index 048769d51e80b45cfabbb5b414e0d747866eac37..d3e3b8c827c42f335fe1837f18237ba6035085b6 100644 --- a/src/inital.F90 +++ b/src/inital.F90 @@ -22,14 +22,14 @@ SUBROUTINE inital ELSE CALL init_moments !!!!!! Set phi !!!!!! - IF (my_id .EQ. 1) WRITE(*,*) 'Init phi' + IF (my_id .EQ. 0) WRITE(*,*) 'Init phi' CALL poisson ENDIF !!!!!! Set Sepj, Sipj and dnjs coeff table !!!!!! IF ( NON_LIN ) THEN; - IF (my_id .EQ. 1) WRITE(*,*) 'Init Sapj' + IF (my_id .EQ. 0) WRITE(*,*) 'Init Sapj' CALL compute_Sapj ! WRITE(*,*) 'Building Dnjs table' CALL build_dnjs_table