SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_surfex_mpi.F90
Go to the documentation of this file.
00001 !     ######################
00002       MODULE MODD_SURFEX_MPI
00003 !     ######################
00004 !
00005 !!****  *MODD_SURFEX_MPI
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !!
00011 !!**  IMPLICIT ARGUMENTS
00012 !!    ------------------
00013 !!      None 
00014 !!
00015 !!    REFERENCE
00016 !!    ---------
00017 !!
00018 !!    AUTHOR
00019 !!    ------
00020 !!      S. Faroux   *Meteo France*
00021 !!
00022 !!    MODIFICATIONS
00023 !!    -------------
00024 !!      Original       04/06/12
00025 !
00026 !*       0.   DECLARATIONS
00027 !             ------------
00028 !
00029 USE MODD_SURFEX_OMP, ONLY : NBLOCK
00030 !
00031 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00032 USE PARKIND1  ,ONLY : JPRB
00033 !
00034 IMPLICIT NONE
00035 !-------------------------------------------------------------------------------
00036 !
00037 INTEGER, DIMENSION(:), ALLOCATABLE :: NINDEX
00038 INTEGER, DIMENSION(:), ALLOCATABLE :: NSIZE_TASK
00039 !
00040 INTEGER, DIMENSION(:,:), ALLOCATABLE :: NWG_LAYER_TOT
00041 !
00042 INTEGER :: NWG_SIZE
00043 !
00044 INTEGER :: NPROC = 1
00045 INTEGER :: NRANK = 0
00046 INTEGER :: NCOMM = -1
00047 INTEGER :: NPIO  = 0
00048 INTEGER :: NSIZE = 0
00049 !
00050 INTEGER :: IDX_R = 0
00051 INTEGER :: IDX_W = 0
00052 !
00053 DOUBLE PRECISION, DIMENSION(5) :: XTIME_WRITE
00054 !$OMP THREADPRIVATE(XTIME_WRITE)
00055 DOUBLE PRECISION, DIMENSION(6) :: XTIME_CALC
00056 !$OMP THREADPRIVATE(XTIME_CALC)
00057 DOUBLE PRECISION :: XTIME_NPIO_READ=0
00058 !$OMP THREADPRIVATE(XTIME_NPIO_READ)
00059 DOUBLE PRECISION :: XTIME_NPIO_WRITE=0
00060 !$OMP THREADPRIVATE(XTIME_NPIO_WRITE)
00061 DOUBLE PRECISION :: XTIME_COMM_READ=0
00062 !$OMP THREADPRIVATE(XTIME_COMM_READ)
00063 DOUBLE PRECISION :: XTIME_CALC_READ=0
00064 !$OMP THREADPRIVATE(XTIME_CALC_READ)
00065 DOUBLE PRECISION :: XTIME_COMM_WRITE=0
00066 !$OMP THREADPRIVATE(XTIME_COMM_WRITE)
00067 DOUBLE PRECISION :: XTIME_CALC_WRITE=0
00068 !$OMP THREADPRIVATE(XTIME_CALC_WRITE)
00069 DOUBLE PRECISION :: XTIME_OMP_BARR=0
00070 !$OMP THREADPRIVATE(XTIME_OMP_BARR)
00071 !
00072 DOUBLE PRECISION :: XTIME_INIT_SEA=0
00073 !$OMP THREADPRIVATE(XTIME_INIT_SEA)
00074 DOUBLE PRECISION :: XTIME_INIT_WATER=0
00075 !$OMP THREADPRIVATE(XTIME_INIT_WATER)
00076 DOUBLE PRECISION :: XTIME_INIT_NATURE=0
00077 !$OMP THREADPRIVATE(XTIME_INIT_NATURE)
00078 DOUBLE PRECISION :: XTIME_INIT_TOWN=0
00079 !$OMP THREADPRIVATE(XTIME_INIT_TOWN)
00080 !
00081 DOUBLE PRECISION :: XTIME_SEA=0
00082 !$OMP THREADPRIVATE(XTIME_SEA)
00083 DOUBLE PRECISION :: XTIME_WATER=0
00084 !$OMP THREADPRIVATE(XTIME_WATER)
00085 DOUBLE PRECISION :: XTIME_NATURE=0
00086 !$OMP THREADPRIVATE(XTIME_NATURE)
00087 DOUBLE PRECISION :: XTIME_TOWN=0
00088 !$OMP THREADPRIVATE(XTIME_TOWN)
00089 !
00090 CONTAINS
00091 !
00092 SUBROUTINE WLOG_MPI(HLOG,PLOG,KLOG,KLOG2,OLOG)
00093 !
00094 IMPLICIT NONE
00095 !
00096  CHARACTER(LEN=*), INTENT(IN) :: HLOG
00097 DOUBLE PRECISION, INTENT(IN),OPTIONAL :: PLOG
00098 INTEGER, INTENT(IN), OPTIONAL :: KLOG
00099 INTEGER, INTENT(IN), OPTIONAL :: KLOG2
00100 LOGICAL, INTENT(IN), OPTIONAL :: OLOG
00101 !
00102  CHARACTER(LEN=100) :: YNAME
00103 INTEGER :: IUNIT
00104 !
00105 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00106 !
00107 IF (LHOOK) CALL DR_HOOK('MODD_SURFEX_MPI:WLOG_MPI',0,ZHOOK_HANDLE)
00108 !
00109 IUNIT=100000+NRANK
00110 !
00111 !$OMP SINGLE
00112 !
00113 IF (NRANK>=10) THEN
00114   WRITE(YNAME,FMT='(A3,I2)') 'log',NRANK
00115 ELSE
00116   WRITE(YNAME,FMT='(A3,I1)') 'log',NRANK
00117 ENDIF
00118 !
00119 OPEN(UNIT=IUNIT,FILE=YNAME,FORM='FORMATTED',  position="append")
00120 !
00121 !$OMP END SINGLE
00122 !
00123 !$OMP CRITICAL
00124 !
00125 IF (PRESENT(OLOG)) THEN
00126   IF (PRESENT(PLOG)) THEN
00127     IF (PRESENT(KLOG)) THEN
00128       IF (PRESENT(KLOG2)) THEN
00129         WRITE(IUNIT,*) NBLOCK, HLOG, KLOG, KLOG2, PLOG, OLOG
00130       ELSE
00131         WRITE(IUNIT,*) NBLOCK, HLOG, KLOG, PLOG, OLOG
00132       ENDIF
00133     ELSE
00134       WRITE(IUNIT,*) NBLOCK, HLOG, PLOG, OLOG
00135     ENDIF
00136   ELSEIF (PRESENT(KLOG)) THEN
00137     IF (PRESENT(KLOG2)) THEN
00138       WRITE(IUNIT,*) NBLOCK, HLOG, KLOG, KLOG2, OLOG
00139     ELSE
00140       WRITE(IUNIT,*) NBLOCK, HLOG, KLOG, OLOG
00141     ENDIF
00142   ELSE
00143     WRITE(IUNIT,*) NBLOCK, HLOG, OLOG
00144   ENDIF
00145 ELSEIF (PRESENT(PLOG)) THEN
00146   IF (PRESENT(KLOG)) THEN
00147     IF (PRESENT(KLOG2)) THEN
00148       WRITE(IUNIT,*) NBLOCK, HLOG, KLOG, KLOG2, PLOG
00149     ELSE
00150       WRITE(IUNIT,*) NBLOCK, HLOG, KLOG, PLOG
00151     ENDIF
00152   ELSE
00153     WRITE(IUNIT,*) NBLOCK, HLOG, PLOG
00154   ENDIF
00155 ELSEIF (PRESENT(KLOG)) THEN
00156   IF (PRESENT(KLOG2)) THEN
00157     WRITE(IUNIT,*) NBLOCK, HLOG, KLOG, KLOG2
00158   ELSE
00159     WRITE(IUNIT,*) NBLOCK, HLOG, KLOG
00160   ENDIF
00161 ELSE
00162   WRITE(IUNIT,*) NBLOCK, HLOG
00163 ENDIF
00164 IF (PRESENT(OLOG)) WRITE(IUNIT,*) OLOG
00165 !
00166 !$OMP END CRITICAL
00167 !
00168 !$OMP BARRIER 
00169 !
00170 !$OMP SINGLE
00171 !
00172 CLOSE(IUNIT)
00173 !
00174 !$OMP END SINGLE
00175 !
00176 IF (LHOOK) CALL DR_HOOK('MODD_SURFEX_MPI:WLOG_MPI',1,ZHOOK_HANDLE)
00177 !
00178 END SUBROUTINE WLOG_MPI
00179 !
00180 SUBROUTINE PREP_LOG_MPI
00181 !
00182  CHARACTER(LEN=100) :: YNAME
00183 INTEGER :: IUNIT
00184 !
00185 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00186 !
00187 IF (LHOOK) CALL DR_HOOK('MODD_SURFEX_MPI:PREP_LOG_MPI',0,ZHOOK_HANDLE)
00188 !
00189 IF (NRANK>=10) THEN
00190   WRITE(YNAME,FMT='(A3,I2)') 'log',NRANK
00191 ELSE
00192   WRITE(YNAME,FMT='(A3,I1)') 'log',NRANK
00193 ENDIF
00194 !
00195 IUNIT=100000+NRANK
00196 !
00197 OPEN(UNIT=IUNIT,FILE=YNAME,FORM='FORMATTED')
00198 WRITE(IUNIT,*) "Log offline pour proc ",NRANK
00199 CLOSE(UNIT=IUNIT)
00200 !
00201 IF (LHOOK) CALL DR_HOOK('MODD_SURFEX_MPI:PREP_LOG_MPI',1,ZHOOK_HANDLE)
00202 !
00203 END SUBROUTINE PREP_LOG_MPI
00204 !-------------------------------------------------------------------------------
00205 !
00206 END MODULE MODD_SURFEX_MPI
00207