SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/TOPD/init_topd.F90
Go to the documentation of this file.
00001 !-----------------------------------------------------------------
00002 !     #######################
00003       SUBROUTINE INIT_TOPD(HPROGRAM)
00004 !     #######################
00005 !
00006 !!****  *INIT_TOPD*  
00007 !!
00008 !!    PURPOSE
00009 !!    -------
00010 !     This routine aims at initialising the variables 
00011 !     needed of running Topmodel.
00012 !              
00013 !     
00014 !!**  METHOD
00015 !!    ------
00016 !
00017 !!    EXTERNAL
00018 !!    --------
00019 !!
00020 !!    none
00021 !!
00022 !!    IMPLICIT ARGUMENTS
00023 !!    ------------------ 
00024 !!
00025 !!    
00026 !!    
00027 !!
00028 !!      
00029 !!    REFERENCE
00030 !!    ---------
00031 !!
00032 !!    
00033 !!      
00034 !!    AUTHOR 
00035 !!    ------
00036 !!
00037 !!      K. Chancibault  * LTHE / Meteo-France *
00038 !!      B. Vincendon    * Meteo-France *
00039 !!
00040 !!    MODIFICATIONS
00041 !!    -------------
00042 !!
00043 !!      Original   11/2006
00044 !!      Modification 04/2007 : Supression of 2 arguments KSTEP,PSTEP 
00045 !!                             that are now module arguments from MODD_TOPDDYN_n
00046 !!                             NNB_TOPD_STEP,XTOPD_STEP
00047 !!      Modification 11/2011 : Exfiltration option removed (B. Vincendon)
00048 !-------------------------------------------------------------------------------
00049 !
00050 !*       0.     DECLARATIONS
00051 !               ------------
00052 !
00053 USE MODD_COUPLING_TOPD, ONLY : NNB_STP_RESTART
00054 USE MODD_TOPODYN,       ONLY : CCAT, NNCAT, NNB_TOPD_STEP, XTOPD_STEP,&
00055                                XDXT, NNXC, NNYC,&
00056                                XNUL, XX0, XY0, NNPT,&
00057                                NX_STEP_ROUT, XSPEEDR,&
00058                                XSPEEDH, NNMC, NMESHT, NPMAX,&
00059                                NLINE,  XDMAXT,&
00060                                XTOPD, XDRIV, XDHIL, XTIME_TOPD,&
00061                                XDGRD, XSPEEDG, XTIME_TOPD_DRAIN,&
00062                                XQTOT, XTANB, XSLOP, XDAREA,&
00063                                XLAMBDA, XCONN, XQB_DR, XQB_RUN
00064 !
00065 USE MODD_TOPD_PAR, ONLY : NDIM
00066 USE MODD_SURF_PAR,       ONLY : XUNDEF, NUNDEF
00067 !
00068 USE MODI_GET_LUOUT
00069 USE MODI_READ_TOPD_HEADER_DTM
00070 USE MODI_READ_TOPD_FILE
00071 USE MODI_READ_TOPD_HEADER_CONNEX
00072 USE MODI_READ_CONNEX_FILE
00073 USE MODI_READ_SLOPE_FILE
00074 !
00075 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00076 USE PARKIND1  ,ONLY : JPRB
00077 !
00078 IMPLICIT NONE
00079 !
00080 !*      0.1    declarations of arguments
00081 !
00082  CHARACTER(LEN=*), INTENT(IN) :: HPROGRAM    !
00083 !
00084 !*      0.2    declarations of local variables
00085 !
00086 !
00087  CHARACTER(LEN=50), DIMENSION(:),ALLOCATABLE :: YFILETOP ! topographic file names
00088  CHARACTER(LEN=50), DIMENSION(:),ALLOCATABLE :: YFILECON ! topographic file names
00089  CHARACTER(LEN=50), DIMENSION(:),ALLOCATABLE :: YFILESLO ! topographic file names
00090  CHARACTER(LEN=50), DIMENSION(:),ALLOCATABLE :: YFILEDH  ! topographic file names
00091  CHARACTER(LEN=50), DIMENSION(:),ALLOCATABLE :: YFILEDR  ! topographic file names
00092 INTEGER                   :: JJ,JCAT ! loop control 
00093 INTEGER                   :: IUNIT                  ! Unit of the files
00094 INTEGER                   :: ILUOUT                 ! Unit of the files
00095 !
00096 REAL, DIMENSION(:),ALLOCATABLE    :: ZTOPD_READ !Topgraphic variable read
00097 !
00098 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00099 !-------------------------------------------------------------------------------
00100 IF (LHOOK) CALL DR_HOOK('INIT_TOPD',0,ZHOOK_HANDLE)
00101 !
00102 !*       1    Initialization:
00103 !               ---------------
00104 !
00105  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00106 !
00107 WRITE(ILUOUT,*) 'INITIALISATION INIT_TOPD'
00108 !
00109 ALLOCATE(YFILETOP(NNCAT))
00110 ALLOCATE(YFILECON(NNCAT))
00111 ALLOCATE(YFILESLO(NNCAT))
00112 ALLOCATE(YFILEDH (NNCAT))
00113 ALLOCATE(YFILEDR (NNCAT))
00114 !
00115 DO JCAT=1,NNCAT
00116   YFILETOP(JCAT)=TRIM(CCAT(JCAT))//'_FilledDTM.map'
00117   YFILECON(JCAT)=TRIM(CCAT(JCAT))//'_connections.vec'
00118   YFILESLO(JCAT)=TRIM(CCAT(JCAT))//'_slope.vec'
00119   YFILEDR(JCAT)=TRIM(CCAT(JCAT))//'_RiverDist.map'
00120   YFILEDH(JCAT)=TRIM(CCAT(JCAT))//'_HillDist.map'
00121 ENDDO
00122 
00123 ALLOCATE(NNMC(NNCAT))
00124 NNMC(:)=0
00125 ALLOCATE(NNXC(NNCAT))
00126 NNXC(:)=0
00127 ALLOCATE(NNYC(NNCAT))
00128 NNYC(:)=0
00129 ALLOCATE(XX0(NNCAT))
00130 XX0(:)=0.0
00131 ALLOCATE(XY0(NNCAT))
00132 XY0(:)=0.0
00133 ALLOCATE(NNPT(NNCAT))
00134 NNPT(:)=0
00135 ALLOCATE(XNUL(NNCAT))
00136 ALLOCATE(XDXT(NNCAT))
00137 !
00138 !*       2      Topographic files
00139 !               -----------------------------
00140 DO JCAT=1,NNCAT
00141   CALL READ_TOPD_HEADER_DTM(HPROGRAM,YFILETOP(JCAT),'FORMATTED',&
00142                             XX0(JCAT),XY0(JCAT),NNXC(JCAT),NNYC(JCAT),&
00143                             XNUL(JCAT),XDXT(JCAT))
00144 ENDDO
00145 !
00146 NNPT(:) = NNXC(:) * NNYC(:)
00147 !
00148 NPMAX = MAXVAL(NNPT(:))
00149 !
00150 !
00151 ALLOCATE(NLINE(NNCAT,NPMAX))
00152 NLINE(:,:)=0
00153 ALLOCATE(XDRIV(NNCAT,NPMAX))
00154 XDRIV(:,:)=0.0
00155 ALLOCATE(XDHIL(NNCAT,NPMAX))
00156 XDHIL(:,:)=0.0
00157 ALLOCATE(XDGRD(NNCAT,NPMAX))
00158 XDGRD(:,:)=0.0
00159 ALLOCATE(XQTOT(NNCAT,NNB_TOPD_STEP))
00160 XQTOT(:,:)=0.0
00161 ALLOCATE(XTOPD(NNCAT,NPMAX))
00162 XTOPD(:,:)=0.0
00163 
00164 ALLOCATE(ZTOPD_READ(NPMAX))
00165 DO JCAT = 1,NNCAT
00166   !
00167   CALL READ_TOPD_FILE(HPROGRAM,YFILETOP(JCAT),'FORMATTED',NNPT(JCAT),ZTOPD_READ)
00168   DO JJ = 1,NNPT(JCAT)
00169     XTOPD(JCAT,JJ) = ZTOPD_READ(JJ) ! XTOPD can only be >=0
00170   ENDDO
00171   !
00172 ENDDO
00173 ! for XTOPD, we do not have to use NLINE, all the pixels of the rectancle around
00174 ! the catchment are read.
00175 !
00176 !*      4       Connection files
00177 !               ----------------
00178 !
00179 DO JCAT=1,NNCAT
00180   CALL READ_TOPD_HEADER_CONNEX(HPROGRAM,YFILECON(JCAT),'FORMATTED',NNMC(JCAT))
00181 ENDDO
00182 !
00183 NMESHT=MAXVAL(NNMC(:))
00184 !
00185 ALLOCATE(XDMAXT(NNCAT,NMESHT))
00186 ALLOCATE(XCONN(NNCAT,NMESHT,NDIM))
00187 XCONN(:,:,:)=0.0
00188 XDMAXT(:,:)=0.0
00189 !
00190 DO JCAT=1,NNCAT
00191   CALL READ_CONNEX_FILE(HPROGRAM,YFILECON(JCAT),'FORMATTED',NNMC(JCAT),XCONN(JCAT,:,:),NLINE(JCAT,:))
00192 ENDDO
00193 !
00194 !*     5        Slope files
00195 !               -----------
00196 IF (HPROGRAM/='PGD') THEN
00197   !
00198   ALLOCATE(XTANB(NNCAT,NMESHT))
00199   ALLOCATE(XSLOP(NNCAT,NMESHT))
00200   ALLOCATE(XDAREA(NNCAT,NMESHT))
00201   ALLOCATE(XLAMBDA(NNCAT,NMESHT))
00202   !
00203   DO JCAT=1,NNCAT
00204     CALL READ_SLOPE_FILE(HPROGRAM,YFILESLO(JCAT),'FORMATTED',NNMC(JCAT),&
00205                        XTANB(JCAT,:),XSLOP(JCAT,:),XDAREA(JCAT,:),XLAMBDA(JCAT,:))
00206   ENDDO
00207   !
00208   !*      6       River Distance file
00209   !               -------------------
00210   !
00211   DO JCAT=1,NNCAT
00212     CALL  READ_TOPD_FILE(HPROGRAM,YFILEDR(JCAT),'FORMATTED',NNPT(JCAT),ZTOPD_READ)
00213     DO JJ=1,NPMAX
00214       IF ( NLINE(JCAT,JJ)/=0. .AND. NLINE(JCAT,JJ)/=XUNDEF ) &
00215        XDRIV(JCAT,NLINE(JCAT,JJ)) = ZTOPD_READ(JJ)
00216     ENDDO
00217   ENDDO
00218   ! for XDRIV, we must use NLINE, online pixels inside de the catchment are read.
00219   !
00220   !*      7       Hillslope Distance file
00221   !  -----------------------
00222   !
00223   DO JCAT=1,NNCAT
00224     CALL  READ_TOPD_FILE(HPROGRAM,YFILEDH(JCAT),'FORMATTED',NNPT(JCAT),ZTOPD_READ)
00225     DO JJ=1,NPMAX
00226       IF ( NLINE(JCAT,JJ)/=0. .AND. NLINE(JCAT,JJ)/=XUNDEF ) &
00227         XDHIL(JCAT,NLINE(JCAT,JJ)) = ZTOPD_READ(JJ)
00228     ENDDO
00229   ENDDO
00230   !
00231   ! for XDHIL, we must use NLINE, online pixels inside de the catchment are read.
00232   XDGRD(:,:) = XDHIL(:,:)
00233   !
00234   !*      8       Calculations for routing by geomorpho
00235   !               -------------------------------------
00236   !
00237   ALLOCATE(NX_STEP_ROUT(NNCAT))
00238   ALLOCATE(XTIME_TOPD(NNCAT,NMESHT))
00239   ALLOCATE(XTIME_TOPD_DRAIN(NNCAT,NMESHT))
00240   !
00241   XTIME_TOPD(:,:) = 0.0
00242   XTIME_TOPD_DRAIN(:,:) = 0.0
00243   XSPEEDH(:) = XSPEEDR(:)/10.
00244   !
00245   !
00246   DO JCAT=1,NNCAT
00247     !
00248     IF ( XSPEEDR(JCAT)/=0. .AND. XSPEEDG(JCAT)/=0. ) THEN
00249       WHERE ( XDHIL(JCAT,1:NNMC(JCAT))/=XUNDEF .AND. XDRIV(JCAT,1:NNMC(JCAT))/=XUNDEF ) &
00250         XTIME_TOPD(JCAT,1:NNMC(JCAT)) = XDHIL(JCAT,1:NNMC(JCAT)) / XSPEEDH(JCAT) + &
00251                                         XDRIV(JCAT,1:NNMC(JCAT)) / XSPEEDR(JCAT)
00252       WHERE ( XDGRD(JCAT,1:NNMC(JCAT))/=XUNDEF .AND. XDRIV(JCAT,1:NNMC(JCAT))/=XUNDEF ) &
00253         XTIME_TOPD_DRAIN(JCAT,1:NNMC(JCAT)) = XDGRD(JCAT,1:NNMC(JCAT)) / XSPEEDG(JCAT) + &
00254                                               XDRIV(JCAT,1:NNMC(JCAT)) / XSPEEDR(JCAT)
00255     ELSE 
00256       WRITE(ILUOUT,*) 'You have to choose some values for routing velocities'
00257     ENDIF
00258     !
00259     IF (XTOPD_STEP/=0.) &
00260       NX_STEP_ROUT(JCAT) = INT(MAXVAL(XTIME_TOPD(JCAT,1:NNMC(JCAT))) / XTOPD_STEP) + 1
00261     !
00262   ENDDO
00263   !
00264   IF ( NNB_STP_RESTART==0 ) NNB_STP_RESTART = MAX(NNB_TOPD_STEP,MAXVAL(NX_STEP_ROUT(:)))
00265   !
00266   !
00267   ALLOCATE(XQB_DR(NNCAT,NNB_TOPD_STEP))
00268   XQB_DR(:,:)=0.0
00269   ALLOCATE(XQB_RUN(NNCAT,NNB_TOPD_STEP))
00270   XQB_RUN(:,:)=0.0
00271   !
00272 ENDIF
00273 !
00274 IF (LHOOK) CALL DR_HOOK('INIT_TOPD',1,ZHOOK_HANDLE)
00275 !
00276 END SUBROUTINE INIT_TOPD