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