|
SURFEX v7.3
General documentation of Surfex
|
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
1.8.0