SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/TRIP/diag_tripn.F90
Go to the documentation of this file.
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