MODULE MOD_INCA_MPI_DATA USE MOD_CONST_MPI_INCA IMPLICIT NONE INTEGER,SAVE :: ii_begin INTEGER,SAVE :: ii_end INTEGER,SAVE :: jj_begin INTEGER,SAVE :: jj_end INTEGER,SAVE :: jj_nb INTEGER,SAVE :: ij_begin INTEGER,SAVE :: ij_end INTEGER,SAVE :: ij_nb INTEGER,SAVE :: plon_mpi_begin INTEGER,SAVE :: plon_mpi_end INTEGER,SAVE :: plon_mpi INTEGER,SAVE :: ni_winds ! ni_winds et nj_winds dim de la grille vents 320x160 INTEGER,SAVE :: nj_winds INTEGER,SAVE :: ni_oxyd, nj_oxyd, presnivs_oxyd INTEGER,SAVE :: ntime_winds INTEGER,SAVE :: ntime_chemLR INTEGER,SAVE :: ntime_npp INTEGER,SAVE :: ntime_oxyd INTEGER,SAVE :: ntime_co2h INTEGER,SAVE :: ntype_landuse INTEGER,SAVE :: ni_u_vlr ! ni_winds et nj_winds dim de la grille vents 320x160 INTEGER,SAVE :: nj_u_vlr INTEGER,SAVE :: ni_v_vlr ! ni_winds et nj_winds dim de la grille vents 320x160 INTEGER,SAVE :: nj_v_vlr INTEGER,SAVE :: ntime_winds_vlr INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: jj_para_nb INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: jj_para_begin INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: jj_para_end INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: ii_para_begin INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: ii_para_end INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: ij_para_nb INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: ij_para_begin INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: ij_para_end INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: plon_mpi_para_nb INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: plon_mpi_para_begin INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: plon_mpi_para_end INTEGER,SAVE :: mpi_rank INTEGER,SAVE :: mpi_size INTEGER,SAVE :: mpi_root LOGICAL,SAVE :: is_mpi_root LOGICAL,SAVE :: is_ok_mpi LOGICAL,SAVE :: is_north_pole LOGICAL,SAVE :: is_south_pole INTEGER,SAVE :: MPI_COMM_INCA CONTAINS SUBROUTINE Init_inca_mpi_data(iim,jjp1,nb_proc,distrib,COMM_LMDZ) USE mod_const_mpi_inca IMPLICIT NONE INTEGER,INTENT(in) :: iim INTEGER,INTENT(in) :: jjp1 INTEGER,INTENT(in) :: nb_proc INTEGER,INTENT(in) :: distrib(0:nb_proc-1) INTEGER,INTENT(IN) :: COMM_LMDZ INTEGER :: ierr INTEGER :: plon_glo INTEGER :: i print *, "(inca) COMM_LMDZ ", COMM_LMDZ #ifdef CPP_PARA CALL Init_const_mpi_inca(COMM_LMDZ) is_ok_mpi=.TRUE. #else is_ok_mpi=.FALSE. #endif plon_glo=iim*(jjp1-2)+2 MPI_COMM_INCA=COMM_INCA IF (is_ok_mpi) THEN print *, '(inca) MPI_COMM_INCA = ', MPI_COMM_INCA, COMM_LMDZ #ifdef CPP_PARA CALL MPI_COMM_SIZE(MPI_COMM_INCA,mpi_size,ierr) CALL MPI_COMM_RANK(MPI_COMM_INCA,mpi_rank,ierr) #endif ELSE mpi_size=1 mpi_rank=0 ENDIF IF (mpi_rank == 0) THEN mpi_root = 0 is_mpi_root = .true. ENDIF IF (mpi_rank == 0) THEN is_north_pole = .TRUE. ELSE is_north_pole = .FALSE. ENDIF IF (mpi_rank == mpi_size-1) THEN is_south_pole = .TRUE. ELSE is_south_pole = .FALSE. ENDIF ALLOCATE(jj_para_nb(0:mpi_size-1)) ALLOCATE(jj_para_begin(0:mpi_size-1)) ALLOCATE(jj_para_end(0:mpi_size-1)) ALLOCATE(ij_para_nb(0:mpi_size-1)) ALLOCATE(ij_para_begin(0:mpi_size-1)) ALLOCATE(ij_para_end(0:mpi_size-1)) ALLOCATE(ii_para_begin(0:mpi_size-1)) ALLOCATE(ii_para_end(0:mpi_size-1)) ALLOCATE(plon_mpi_para_nb(0:mpi_size-1)) ALLOCATE(plon_mpi_para_begin(0:mpi_size-1)) ALLOCATE(plon_mpi_para_end(0:mpi_size-1)) plon_mpi_para_nb(0:mpi_size-1)=distrib(0:nb_proc-1) DO i=0,mpi_size-1 IF (i==0) THEN plon_mpi_para_begin(i)=1 ELSE plon_mpi_para_begin(i)=plon_mpi_para_end(i-1)+1 ENDIF plon_mpi_para_end(i)=plon_mpi_para_begin(i)+plon_mpi_para_nb(i)-1 ENDDO DO i=0,mpi_size-1 IF (i==0) THEN ij_para_begin(i) = 1 ELSE ij_para_begin(i) = plon_mpi_para_begin(i)+iim-1 ENDIF jj_para_begin(i) = (ij_para_begin(i)-1)/iim + 1 ii_para_begin(i) = MOD(ij_para_begin(i)-1,iim) + 1 ij_para_end(i) = plon_mpi_para_end(i)+iim-1 jj_para_end(i) = (ij_para_end(i)-1)/iim + 1 ii_para_end(i) = MOD(ij_para_end(i)-1,iim) + 1 ij_para_nb(i) = ij_para_end(i)-ij_para_begin(i)+1 jj_para_nb(i) = jj_para_end(i)-jj_para_begin(i)+1 ENDDO ii_begin = ii_para_begin(mpi_rank) ii_end = ii_para_end(mpi_rank) jj_begin = jj_para_begin(mpi_rank) jj_end = jj_para_end(mpi_rank) jj_nb = jj_para_nb(mpi_rank) ij_begin = ij_para_begin(mpi_rank) ij_end = ij_para_end(mpi_rank) ij_nb = ij_para_nb(mpi_rank) plon_mpi_begin = plon_mpi_para_begin(mpi_rank) plon_mpi_end = plon_mpi_para_end(mpi_rank) plon_mpi = plon_mpi_para_nb(mpi_rank) CALL Print_module_data #ifdef CPP_PARA CALL MPI_BARRIER(MPI_COMM_INCA, ierr) #endif END SUBROUTINE Init_inca_mpi_data SUBROUTINE print_module_data IMPLICIT NONE print *, '(Inca) print_module_data' print *, '(Inca) ii_begin =', ii_begin print *, '(Inca) ii_end =', ii_end print *, '(Inca) jj_begin =',jj_begin print *, '(Inca) jj_end =', jj_end print *, '(Inca) jj_nb =', jj_nb print *, '(Inca) ij_begin =', ij_begin print *, '(Inca) ij_end =', ij_end print *, '(Inca) ij_nb =', ij_nb print *, '(Inca) plon_mpi_begin =', plon_mpi_begin print *, '(Inca) plon_mpi_end =', plon_mpi_end print *, '(Inca) plon_mpi =', plon_mpi print *, '(Inca) jj_para_nb =', jj_para_nb print *, '(Inca) jj_para_begin =', jj_para_begin print *, '(Inca) jj_para_end =', jj_para_end print *, '(Inca) ii_para_begin =', ii_para_begin print *, '(Inca) ii_para_end =', ii_para_end print *, '(Inca) ij_para_nb =', ij_para_nb print *, '(Inca) ij_para_begin =', ij_para_begin print *, '(Inca) ij_para_end =', ij_para_end print *, '(Inca) plon_mpi_para_nb =', plon_mpi_para_nb print *, '(Inca) plon_mpi_para_begin =', plon_mpi_para_begin print *, '(Inca) plon_mpi_para_end =', plon_mpi_para_end print *, '(Inca) mpi_rank =', mpi_rank print *, '(Inca) mpi_size =', mpi_size print *, '(Inca) mpi_root =', mpi_root print *, '(Inca) is_mpi_root =', is_mpi_root print *, '(Inca) is_north_pole =', is_north_pole print *, '(Inca) is_south_pole =', is_south_pole print *, '(Inca) MPI_COMM_INCA =', MPI_COMM_INCA END SUBROUTINE print_module_data END MODULE mod_inca_mpi_data