|
SURFEX v7.3
General documentation of Surfex
|
00001 !############################################################################ 00002 SUBROUTINE INIT_COUPLING_SURF_TRIP_n(HPROGRAM, KI, KSW, OFLOOD_ISBA, HGRID, & 00003 KDIMTAB, PZENITH, PSW_BANDS, PEMIS, & 00004 PTSRAD, PDIR_ALB, PSCA_ALB ) 00005 !############################################################################ 00006 ! 00007 !!**** *INIT_COUPLING_SURF_TRIP_n* - routine to test and initialyse the SURFACE-TRIP coupling 00008 !! 00009 !! PURPOSE 00010 !! ------- 00011 !! 00012 ! For instance, no interpolation between the ISBA and the TRIP grids that 00013 ! must be the same (LAT LON REG 1° or 0.5°). In the near future some 00014 ! interpolation will be added. 00015 ! 00016 !!** METHOD 00017 !! ------ 00018 !! 00019 !! EXTERNAL 00020 !! -------- 00021 !! 00022 !! 00023 !! IMPLICIT ARGUMENTS 00024 !! ------------------ 00025 !! 00026 !! REFERENCE 00027 !! --------- 00028 !! 00029 !! 00030 !! AUTHOR 00031 !! ------ 00032 !! B. Decharme *Meteo France* 00033 !! 00034 !! MODIFICATIONS 00035 !! ------------- 00036 !! Original 05/2008 00037 !------------------------------------------------------------------------------- 00038 ! 00039 !* 0. DECLARATIONS 00040 ! ------------ 00041 ! 00042 USE MODE_COUPLING_VAR_SFX_TRIP 00043 ! 00044 USE MODI_GET_LUOUT 00045 USE MODI_GET_GRID_CONF_ISBA_n 00046 USE MODI_GET_GRID_CONF_TRIP_n 00047 USE MODI_GET_CONF_TRIP_n 00048 ! 00049 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00050 USE PARKIND1 ,ONLY : JPRB 00051 ! 00052 USE MODI_ABOR1_SFX 00053 ! 00054 USE MODI_UPDATE_ESM_SURF_ATM_n 00055 ! 00056 IMPLICIT NONE 00057 ! 00058 !* 0.1 Declarations of arguments 00059 ! ------------------------- 00060 ! 00061 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes 00062 CHARACTER(LEN=10), INTENT(IN) :: HGRID 00063 LOGICAL, INTENT(IN) :: OFLOOD_ISBA 00064 INTEGER, INTENT(IN) :: KDIMTAB 00065 INTEGER, INTENT(IN) :: KI ! Surfex grid dimension 00066 INTEGER, INTENT(IN) :: KSW ! Number of spectral bands 00067 ! 00068 REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! solar zenithal angle 00069 REAL, DIMENSION(KSW), INTENT(IN) :: PSW_BANDS ! middle wavelength of each band 00070 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB ! direct albedo for each band 00071 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB ! diffuse albedo for each band 00072 REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity 00073 REAL, DIMENSION(KI), INTENT(OUT) :: PTSRAD ! radiative temperature 00074 ! 00075 !* 0.2 Declarations of local variables 00076 ! ------------------------------- 00077 ! 00078 ! 1D TRIP Dimension 00079 ! 00080 REAL, DIMENSION(:), ALLOCATABLE :: ZTRIP_FFLOOD ! Flooded fraction for ISBA (-) 00081 REAL, DIMENSION(:), ALLOCATABLE :: ZTRIP_PIFLOOD ! Flood potential infiltration for ISBA (kg/m2/s) 00082 ! 00083 ! 1D SFX Dimension 00084 ! 00085 REAL, DIMENSION(:), ALLOCATABLE :: ZSFX_FFLOOD ! Flooded fraction for ISBA (-) 00086 REAL, DIMENSION(:), ALLOCATABLE :: ZSFX_PIFLOOD ! Flood potential infiltration for ISBA (kg/m2/s) 00087 ! 00088 ! Other 00089 ! 00090 LOGICAL :: LFLOOD_TRIP 00091 ! 00092 REAL :: ZLONMIN_ISBA 00093 REAL :: ZLONMIN_TRIP 00094 REAL :: ZLONMAX_ISBA 00095 REAL :: ZLONMAX_TRIP 00096 REAL :: ZLATMIN_ISBA 00097 REAL :: ZLATMIN_TRIP 00098 REAL :: ZLATMAX_ISBA 00099 REAL :: ZLATMAX_TRIP 00100 REAL :: ZRES_ISBA 00101 REAL :: ZRES_TRIP 00102 REAL :: ZT_COUPLING 00103 ! 00104 INTEGER :: ICOMP_TRIP 00105 INTEGER :: ICOMP_ISBA 00106 ! 00107 INTEGER :: ILON_ISBA 00108 INTEGER :: ILON_TRIP 00109 INTEGER :: ILAT_ISBA 00110 INTEGER :: ILAT_TRIP 00111 ! 00112 INTEGER :: ILUOUT, JL, INI 00113 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00114 ! 00115 !------------------------------------------------------------------------------- 00116 ! 00117 IF (LHOOK) CALL DR_HOOK('INIT_COUPLING_SURF_TRIP_N',0,ZHOOK_HANDLE) 00118 CALL GET_LUOUT(HPROGRAM,ILUOUT) 00119 ! 00120 !* 1.0 Test ISBA - TRIP option compatibility 00121 ! ------------------------------------- 00122 ! 00123 CALL GET_CONF_TRIP_n(LFLOOD_TRIP,ZT_COUPLING) 00124 ! 00125 ICOMP_TRIP=0 00126 IF(LFLOOD_TRIP)ICOMP_TRIP=1 00127 ! 00128 ICOMP_ISBA=0 00129 IF(OFLOOD_ISBA)ICOMP_ISBA=1 00130 ! 00131 IF(ICOMP_TRIP/=ICOMP_ISBA)THEN 00132 WRITE(ILUOUT,*)'INIT_COUPLING_SURF_TRIPN: IN TRIP LFLOODT = ',LFLOOD_TRIP 00133 WRITE(ILUOUT,*)'INIT_COUPLING_SURF_TRIPN: IN ISBA LFLOOD = ',OFLOOD_ISBA 00134 CALL ABOR1_SFX('INIT_COUPLING_SURF_TRIPN: ERROR OF (DE)ACTIVATION OF FLOODING SCHEME') 00135 ENDIF 00136 ! 00137 !* 2.0 Test ISBA - TRIP grid compatibility 00138 ! ------------------------------------- 00139 ! 00140 IF(HGRID/="LONLAT REG")THEN 00141 CALL ABOR1_SFX('INIT_COUPLING_SURF_TRIPN: ISBA-TRIP REQUIRE LONLAT REG GRID') 00142 ENDIF 00143 ! 00144 CALL GET_GRID_CONF_ISBA_n(ZLONMIN_ISBA,ZLONMAX_ISBA,ZLATMIN_ISBA,ZLATMAX_ISBA,ILON_ISBA,ILAT_ISBA,JL) 00145 ZRES_ISBA = (ZLONMAX_ISBA - ZLONMIN_ISBA) / ILON_ISBA 00146 ! 00147 CALL GET_GRID_CONF_TRIP_n(ZLONMIN_TRIP,ZLONMAX_TRIP,ZLATMIN_TRIP,ZLATMAX_TRIP,ZRES_TRIP,ILON_TRIP,ILAT_TRIP) 00148 ! 00149 IF(ZRES_TRIP/=ZRES_ISBA)THEN 00150 WRITE(ILUOUT,*)'INIT_COUPLING_SURF_TRIPN: TRIP RESOLUTION = ',ZRES_TRIP 00151 WRITE(ILUOUT,*)'INIT_COUPLING_SURF_TRIPN: ISBA RESOLUTION = ',ZRES_ISBA 00152 CALL ABOR1_SFX('INIT_COUPLING_SURF_TRIPN: ISBA AND TRIP REQUIRE SAME RESOLUTION GRID') 00153 ENDIF 00154 ! 00155 IF(ZLONMIN_ISBA/=ZLONMIN_TRIP.OR.ZLONMAX_ISBA/=ZLONMAX_TRIP)THEN 00156 CALL ABOR1_SFX('INIT_COUPLING_SURF_TRIPN: WRONG CONFIGURATION FOR LONGITUDE') 00157 ENDIF 00158 ! 00159 IF(ZLATMIN_ISBA/=ZLATMIN_TRIP.OR.ZLATMAX_ISBA/=ZLATMAX_TRIP)THEN 00160 CALL ABOR1_SFX('INIT_COUPLING_SURF_TRIPN: WRONG CONFIGURATION FOR LATITUDE') 00161 ENDIF 00162 ! 00163 ! 00164 ! 00165 ! 00166 !* 3.0 Initialyse ISBA - TRIP variable 00167 ! ------------------------------- 00168 ! 00169 IF(OFLOOD_ISBA.AND.LFLOOD_TRIP)THEN 00170 ! 00171 INI=ILON_TRIP*ILAT_TRIP 00172 ! 00173 ALLOCATE(ZTRIP_FFLOOD (INI)) 00174 ALLOCATE(ZTRIP_PIFLOOD (INI)) 00175 ! 00176 ALLOCATE(ZSFX_FFLOOD (KI)) 00177 ALLOCATE(ZSFX_PIFLOOD (KI)) 00178 ! 00179 ! in TRIP dimension INI 00180 CALL GET_COUPLING_VAR_TRIP_n(ZTRIP_FFLOOD(:),ZTRIP_PIFLOOD(:)) 00181 ! 00182 ! Interpolation from TRIP grid to SFX grid 00183 IF(KI==INI)THEN 00184 ZSFX_FFLOOD (:) = ZTRIP_FFLOOD (:) 00185 ZSFX_PIFLOOD(:) = ZTRIP_PIFLOOD(:) 00186 ELSE 00187 CALL ABOR1_SFX('COUPLING_SURF_TRIPN: TRIP and SFX are not on the same grid') 00188 ENDIF 00189 ! 00190 WHERE(ZSFX_FFLOOD (:)<0.01) 00191 ZSFX_FFLOOD (:)=0.0 00192 ZSFX_PIFLOOD(:)=0.0 00193 ENDWHERE 00194 ! 00195 CALL PUT_COUPLING_VAR_SFX_n(ZSFX_FFLOOD,ZSFX_PIFLOOD,PTSTEP=ZT_COUPLING) 00196 ! 00197 DEALLOCATE(ZTRIP_FFLOOD ) 00198 DEALLOCATE(ZTRIP_PIFLOOD) 00199 DEALLOCATE(ZSFX_FFLOOD ) 00200 DEALLOCATE(ZSFX_PIFLOOD ) 00201 ! 00202 CALL UPDATE_ESM_SURF_ATM_n(HPROGRAM, KI, KSW, PZENITH, PSW_BANDS, & 00203 PTSRAD, PDIR_ALB, PSCA_ALB, PEMIS ) 00204 ! 00205 ENDIF 00206 IF (LHOOK) CALL DR_HOOK('INIT_COUPLING_SURF_TRIP_N',1,ZHOOK_HANDLE) 00207 ! 00208 !------------------------------------------------------------------------------- 00209 ! 00210 END SUBROUTINE INIT_COUPLING_SURF_TRIP_n
1.8.0