SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE DIAG_TRIP_n(KLUOUT,KYEAR,KMONTH,KRUN,PDURATION, & 00003 PSURF_STO_OLD,PQDIS_OLD,PGROUND_STO_OLD, & 00004 PQGF_OLD,PVEL_OLD,PHS_OLD,PFLOOD_STO_OLD,& 00005 PFF_OLD,PHF_OLD,PQFR_OLD,PQRF_OLD, & 00006 PVFIN_OLD,PVFOUT_OLD,PWF_OLD,PLF_OLD, & 00007 PHSF_OLD,PQIN_OLD,PSOURCE_OLD ) 00008 ! ################################################################ 00009 ! 00010 !!**** *DIAG_TRIP_n* 00011 !! 00012 !! PURPOSE 00013 !! ------- 00014 ! 00015 ! TRIP river routing outputs. 00016 ! 00017 !! 00018 !! AUTHOR 00019 !! ------ 00020 !! B. Decharme 00021 !! 00022 !! MODIFICATIONS 00023 !! ------------- 00024 !! Original 28/05/05 00025 !------------------------------------------------------------------------------- 00026 ! 00027 !* 0. DECLARATIONS 00028 ! ------------ 00029 ! 00030 USE MODE_RW_TRIP 00031 ! 00032 USE MODD_TRIP_GRID_n 00033 USE MODD_TRIP_n, ONLY : CGROUNDW, CVIT, LFLOODT, LPRINT_TRIP, XLEN, & 00034 LDIAG_CPL,XTSTEP_COUPLING,LTRIP_DIAG_MISC 00035 USE MODD_DIAG_TRIP_n 00036 ! 00037 ! 00038 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00039 USE PARKIND1 ,ONLY : JPRB 00040 ! 00041 IMPLICIT NONE 00042 ! 00043 !* 0.1 declarations of arguments 00044 ! 00045 INTEGER, INTENT(IN) :: KLUOUT 00046 INTEGER, INTENT(IN) :: KYEAR 00047 INTEGER, INTENT(IN) :: KMONTH 00048 INTEGER, INTENT(IN) :: KRUN 00049 ! 00050 REAL, INTENT(IN) :: PDURATION 00051 ! 00052 REAL,DIMENSION(:,:), INTENT(IN) :: PSURF_STO_OLD 00053 REAL,DIMENSION(:,:), INTENT(IN) :: PQDIS_OLD 00054 REAL,DIMENSION(:,:), INTENT(IN) :: PGROUND_STO_OLD 00055 REAL,DIMENSION(:,:), INTENT(IN) :: PQGF_OLD 00056 REAL,DIMENSION(:,:), INTENT(IN) :: PVEL_OLD 00057 REAL,DIMENSION(:,:), INTENT(IN) :: PHS_OLD 00058 REAL,DIMENSION(:,:), INTENT(IN) :: PFLOOD_STO_OLD 00059 REAL,DIMENSION(:,:), INTENT(IN) :: PFF_OLD 00060 REAL,DIMENSION(:,:), INTENT(IN) :: PHF_OLD 00061 ! 00062 REAL,DIMENSION(:,:), INTENT(IN) :: PQFR_OLD 00063 REAL,DIMENSION(:,:), INTENT(IN) :: PQRF_OLD 00064 REAL,DIMENSION(:,:), INTENT(IN) :: PVFIN_OLD 00065 REAL,DIMENSION(:,:), INTENT(IN) :: PVFOUT_OLD 00066 REAL,DIMENSION(:,:), INTENT(IN) :: PWF_OLD 00067 REAL,DIMENSION(:,:), INTENT(IN) :: PLF_OLD 00068 REAL,DIMENSION(:,:), INTENT(IN) :: PHSF_OLD 00069 REAL,DIMENSION(:,:), INTENT(IN) :: PQIN_OLD 00070 REAL,DIMENSION(:,:), INTENT(IN) :: PSOURCE_OLD 00071 ! 00072 !* 0.2 declarations of local variables 00073 ! 00074 CHARACTER(LEN=10), PARAMETER :: YDIAG ='TRIP_DIAG_' 00075 CHARACTER(LEN=6) :: YTIME 00076 CHARACTER(LEN=50) :: YFILE 00077 CHARACTER(LEN=10) :: YVNAME 00078 ! 00079 REAL,DIMENSION(SIZE(XLEN,1),SIZE(XLEN,2)) :: ZWRITE 00080 ! 00081 INTEGER :: ITNUM, ITVAL, IRUN_END 00082 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00083 ! 00084 !------------------------------------------------------------------------------- 00085 ! 00086 IF (LHOOK) CALL DR_HOOK('DIAG_TRIP_N',0,ZHOOK_HANDLE) 00087 IRUN_END=INT(PDURATION/XTSTEP_COUPLING) 00088 ! 00089 IF(KMONTH/=0)THEN 00090 WRITE(YTIME,'(i4.4,i2.2)') KYEAR, KMONTH 00091 ELSE 00092 WRITE(YTIME,'(i4.4)') KYEAR 00093 ENDIF 00094 ! 00095 !------------------------------------------------------------------------------- 00096 !Dailly outputs 00097 !------------------------------------------------------------------------------- 00098 ! 00099 IF(LDIAG_CPL)THEN 00100 ! 00101 ! * Recup diag file 00102 ! 00103 YFILE =YDIAG//'CPL_'//YTIME(1:LEN_TRIM(YTIME))//'.nc' 00104 ! 00105 ! * Time attribut 00106 ! 00107 ITNUM = KRUN 00108 ITVAL = KRUN 00109 ! 00110 ! * Store output in diag file 00111 ! 00112 YVNAME = 'SURF_STO' 00113 ZWRITE = (XDIAG_SURF_STO - PSURF_STO_OLD) 00114 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00115 ! 00116 YVNAME = 'QDIS' 00117 ZWRITE = (XDIAG_QDIS - PQDIS_OLD) / XTSTEP_COUPLING 00118 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00119 ! 00120 IF(LTRIP_DIAG_MISC)THEN 00121 YVNAME = 'QSIN' 00122 ZWRITE = (XDIAG_QIN - PQIN_OLD) / XTSTEP_COUPLING 00123 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00124 ENDIF 00125 ! 00126 IF(CGROUNDW/='DEF')THEN 00127 ! 00128 YVNAME = 'GROUND_STO' 00129 ZWRITE = (XDIAG_GROUND_STO - PGROUND_STO_OLD) 00130 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00131 ! 00132 YVNAME = 'QGF' 00133 ZWRITE = (XDIAG_QGF - PQGF_OLD) / XTSTEP_COUPLING 00134 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00135 ! 00136 ENDIF 00137 ! 00138 IF(CVIT=='VAR')THEN 00139 ! 00140 YVNAME = 'VEL' 00141 ZWRITE = (XDIAG_VEL - PVEL_OLD) 00142 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00143 ! 00144 YVNAME = 'HSTREAM' 00145 ZWRITE = (XDIAG_HS - PHS_OLD) 00146 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00147 ! 00148 ENDIF 00149 ! 00150 IF(LFLOODT)THEN 00151 ! 00152 YVNAME = 'FFLOOD_T' 00153 ZWRITE = (XDIAG_FF - PFF_OLD) 00154 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00155 ! 00156 YVNAME = 'FLOOD_STO' 00157 ZWRITE = (XDIAG_FLOOD_STO - PFLOOD_STO_OLD) 00158 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00159 ! 00160 YVNAME = 'HFLOOD_T' 00161 ZWRITE = (XDIAG_HF - PHF_OLD) 00162 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00163 ! 00164 IF(LTRIP_DIAG_MISC)THEN 00165 ! 00166 YVNAME = 'QFR' 00167 ZWRITE = (XDIAG_QFR - PQFR_OLD) / XTSTEP_COUPLING 00168 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00169 ! 00170 YVNAME = 'QRF' 00171 ZWRITE = (XDIAG_QRF - PQRF_OLD) / XTSTEP_COUPLING 00172 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00173 ! 00174 YVNAME = 'FSOURCE' 00175 ZWRITE = (XDIAG_SOURCE - PSOURCE_OLD) 00176 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00177 ! 00178 YVNAME = 'VFIN' 00179 ZWRITE = (XDIAG_VFIN - PVFIN_OLD) 00180 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00181 ! 00182 YVNAME = 'VFOUT' 00183 ZWRITE = (XDIAG_VFOUT - PVFOUT_OLD) 00184 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00185 ! 00186 YVNAME = 'HSF' 00187 ZWRITE = (XDIAG_HSF - PHSF_OLD) 00188 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00189 ! 00190 YVNAME = 'WF' 00191 ZWRITE = (XDIAG_WF - PWF_OLD) 00192 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00193 ! 00194 YVNAME = 'LF' 00195 ZWRITE = (XDIAG_LF - PLF_OLD) 00196 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00197 ! 00198 ENDIF 00199 ! 00200 ENDIF 00201 ! 00202 IF(KRUN==IRUN_END.AND.LPRINT_TRIP)WRITE(KLUOUT,*)YFILE(1:LEN_TRIM(YFILE)),' ended successfully !' 00203 ! 00204 ENDIF 00205 ! 00206 !------------------------------------------------------------------------------- 00207 !Monthly or run mean outputs 00208 !------------------------------------------------------------------------------- 00209 ! 00210 IF(KRUN==IRUN_END)THEN 00211 ! 00212 ! * Recup diag file 00213 ! 00214 YFILE =YDIAG//'RUN_'//YTIME(1:LEN_TRIM(YTIME))//'.nc' 00215 ! 00216 ! * Store output in diag file 00217 ! 00218 YVNAME = 'SURF_STO' 00219 ZWRITE = XDIAG_SURF_STO / IRUN_END 00220 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE) 00221 ! 00222 YVNAME = 'QDIS' 00223 ZWRITE = XDIAG_QDIS / PDURATION 00224 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE) 00225 ! 00226 IF(LTRIP_DIAG_MISC)THEN 00227 YVNAME = 'QSIN' 00228 ZWRITE = XDIAG_QIN / PDURATION 00229 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE) 00230 ENDIF 00231 ! 00232 IF(CGROUNDW/='DEF')THEN 00233 ! 00234 YVNAME = 'GROUND_STO' 00235 ZWRITE = XDIAG_GROUND_STO / IRUN_END 00236 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE) 00237 ! 00238 YVNAME = 'QGF' 00239 ZWRITE = XDIAG_QGF / PDURATION 00240 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE) 00241 ! 00242 ENDIF 00243 ! 00244 IF(CVIT=='VAR')THEN 00245 ! 00246 YVNAME = 'VEL' 00247 ZWRITE = XDIAG_VEL / IRUN_END 00248 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE) 00249 ! 00250 YVNAME = 'HSTREAM' 00251 ZWRITE = XDIAG_HS / IRUN_END 00252 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE) 00253 ! 00254 ENDIF 00255 ! 00256 IF(LFLOODT)THEN 00257 ! 00258 YVNAME = 'FFLOOD_T' 00259 ZWRITE = XDIAG_FF / IRUN_END 00260 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE) 00261 ! 00262 YVNAME = 'FLOOD_STO' 00263 ZWRITE = XDIAG_FLOOD_STO / IRUN_END 00264 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE) 00265 ! 00266 YVNAME = 'HFLOOD_T' 00267 ZWRITE = XDIAG_HF / IRUN_END 00268 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE) 00269 ! 00270 IF(LTRIP_DIAG_MISC)THEN 00271 ! 00272 YVNAME = 'QFR' 00273 ZWRITE = XDIAG_QFR / PDURATION 00274 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00275 ! 00276 YVNAME = 'QRF' 00277 ZWRITE = XDIAG_QRF / PDURATION 00278 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00279 ! 00280 YVNAME = 'FSOURCE' 00281 ZWRITE = XDIAG_SOURCE / IRUN_END 00282 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00283 ! 00284 YVNAME = 'VFIN' 00285 ZWRITE = XDIAG_VFIN / IRUN_END 00286 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00287 ! 00288 YVNAME = 'VFOUT' 00289 ZWRITE = XDIAG_VFOUT / IRUN_END 00290 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00291 ! 00292 YVNAME = 'HSF' 00293 ZWRITE = XDIAG_HSF / IRUN_END 00294 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00295 ! 00296 YVNAME = 'WF' 00297 ZWRITE = XDIAG_WF / IRUN_END 00298 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00299 ! 00300 YVNAME = 'LF' 00301 ZWRITE = XDIAG_LF / IRUN_END 00302 CALL WRITE_TRIP(KLUOUT,YFILE,YVNAME,XLEN,ZWRITE,ITNUM,ITVAL) 00303 ! 00304 ENDIF 00305 ! 00306 ENDIF 00307 ! 00308 IF(LPRINT_TRIP)WRITE(KLUOUT,*)YFILE(1:LEN_TRIM(YFILE)),' ended successfully !' 00309 ! 00310 ENDIF 00311 ! 00312 IF (LHOOK) CALL DR_HOOK('DIAG_TRIP_N',1,ZHOOK_HANDLE) 00313 ! 00314 !------------------------------------------------------------------------------- 00315 END SUBROUTINE DIAG_TRIP_n