SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/get_size_fulln.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE GET_SIZE_FULL_n(HPROGRAM,KDIM_FULL,KSIZE_FULL)
00003 !     #######################################################
00004 !
00005 !!****  *GET_SIZE_FULL_n* - get number of points for this proc
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !!
00010 !!**  METHOD
00011 !!    ------
00012 !!
00013 !!    EXTERNAL
00014 !!    --------
00015 !!
00016 !!
00017 !!    IMPLICIT ARGUMENTS
00018 !!    ------------------
00019 !!
00020 !!    REFERENCE
00021 !!    ---------
00022 !!
00023 !!
00024 !!    AUTHOR
00025 !!    ------
00026 !!      S.Malardel   *Meteo France*     
00027 !!
00028 !!    MODIFICATIONS
00029 !!    -------------
00030 !!      Original    05/2004 
00031 !-------------------------------------------------------------------------------
00032 !
00033 !*       0.    DECLARATIONS
00034 !              ------------
00035 !
00036 USE MODD_SURFEX_MPI, ONLY : WLOG_MPI
00037 !
00038 USE MODD_SURF_PAR,   ONLY : NUNDEF
00039 USE MODD_SURF_ATM_n, ONLY : NSIZE_FULL, NDIM_FULL
00040 !
00041 USE MODD_SURFEX_MPI, ONLY : NINDEX, NRANK, NPROC
00042 USE MODD_SURFEX_OMP, ONLY : NINDX1, NINDX2
00043 !
00044 #ifdef MNH
00045 USE MODI_MNHGET_SIZE_FULL_n
00046 #endif
00047 !
00048 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00049 USE PARKIND1  ,ONLY : JPRB
00050 !
00051 IMPLICIT NONE
00052 !
00053 !*       0.1   Declarations of arguments
00054 !              -------------------------
00055 !
00056  CHARACTER(LEN=6),  INTENT(IN)  :: HPROGRAM ! main program
00057 INTEGER         ,  INTENT(IN)  :: KDIM_FULL  ! total number of points
00058 INTEGER         ,  INTENT(OUT) :: KSIZE_FULL ! total number of points on this proc
00059 !
00060 !*       0.2   Declarations of local variables
00061 !              -------------------------------
00062 !
00063 INTEGER :: J
00064 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00065 !-------------------------------------------------------------------------------
00066 !
00067 IF (LHOOK) CALL DR_HOOK('GET_SIZE_FULL_N',0,ZHOOK_HANDLE)
00068 IF (HPROGRAM=='MESONH') THEN
00069 #ifdef MNH
00070   CALL MNHGET_SIZE_FULL_n(HPROGRAM,KDIM_FULL,KSIZE_FULL)
00071 #endif
00072 END IF
00073 !
00074 IF ( HPROGRAM=='OFFLIN' .OR. HPROGRAM=='ASCII ' .OR. HPROGRAM=='FA    ' .OR. HPROGRAM=='LFI   ' .OR. &
00075      HPROGRAM=='TEXTE ' .OR. HPROGRAM=='BINARY' ) THEN
00076 #ifdef OL
00077   IF (NSIZE_FULL/=NUNDEF .AND. NSIZE_FULL/=0) THEN
00078     KSIZE_FULL = NSIZE_FULL
00079   ELSEIF (ALLOCATED(NINDEX)) THEN
00080     KSIZE_FULL = 0
00081     DO J=1,SIZE(NINDEX)
00082       IF ( NINDEX(J)==MOD(NRANK,NPROC) ) KSIZE_FULL = KSIZE_FULL + 1
00083     ENDDO
00084   ELSE
00085     KSIZE_FULL = KDIM_FULL
00086   END IF
00087   IF ( NINDX2/=NINDX1 ) KSIZE_FULL = MIN(KSIZE_FULL,NINDX2-NINDX1+1)
00088 #endif
00089 ENDIF
00090 !
00091 IF (HPROGRAM=='AROME ') THEN
00092 #ifdef ARO
00093   CALL AROGET_SIZE_FULL_n(HPROGRAM,KDIM_FULL,KSIZE_FULL)
00094 #endif
00095 ENDIF
00096 IF (LHOOK) CALL DR_HOOK('GET_SIZE_FULL_N',1,ZHOOK_HANDLE)
00097 !
00098 !-------------------------------------------------------------------------------
00099 !
00100 END SUBROUTINE GET_SIZE_FULL_n