This component calculates fluxes between the model components on the exchange grid.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

52 lines
1.6 KiB

!****************************************************************************************
SUBROUTINE decomp_def(id_paral,id_size,id_im,id_jm,id_rank,id_npes,id_unit)
!
IMPLICIT NONE
INTEGER, DIMENSION(id_size), INTENT(out) :: id_paral(id_size)
INTEGER, INTENT(in) :: id_size
INTEGER, INTENT(in) :: id_im ! Grid dimension in i
INTEGER, INTENT(in) :: id_jm ! Grid dimension in j
INTEGER, INTENT(in) :: id_rank ! Rank of process
INTEGER, INTENT(in) :: id_npes ! Number of processes involved in the coupling
INTEGER, INTENT(in) :: id_unit ! Unit of log file
INTEGER :: il_imjm, il_partj
!
il_imjm = id_im*id_jm
il_partj = id_jm/id_npes ! Nbr of latitude circles in the partition
!
#ifdef DECOMP_APPLE
! Each process is responsible for a part of field defined by
! the number of grid points and the offset of the first point
!
WRITE (id_unit,*) 'APPLE partitioning'
!
IF (id_rank .LT. (id_npes-1)) THEN
id_paral (1) = 1
id_paral (2) = id_rank*(il_partj * id_im)
id_paral (3) = il_partj * id_im
ELSE
id_paral (1) = 1
id_paral (2) = id_rank*(il_partj * id_im)
id_paral (3) = il_imjm-(id_rank*(il_partj * id_im))
ENDIF
!
#elif defined DECOMP_BOX
!
WRITE (id_unit,*) 'BOX partitioning'
!
! Each process is responsible for a rectangular box of il_partj lines
!
id_paral (1) = 2
id_paral (5) = id_im
id_paral (2) = id_rank*il_partj*id_im
id_paral (3) = id_im
IF (id_rank .LT. (id_npes-1)) THEN
id_paral (4) = il_partj
ELSE
id_paral (4) = id_jm-(id_rank*il_partj)
ENDIF
!
#endif
!
END SUBROUTINE decomp_def