SURFEX v7.3
General documentation of Surfex
|
00001 !######################################################### 00002 SUBROUTINE INIT_SURF_TRIP_n(HPROGRAM, KI, KSW, ORESTART, KYEAR, & 00003 KMONTH, PDURATION, KTRIP_MONTH, & 00004 KTRIP_COUNT, PZENITH, PSW_BANDS, & 00005 PEMIS, PTSRAD, PDIR_ALB, PSCA_ALB ) 00006 !######################################################### 00007 ! 00008 !!**** *INIT_SURF_TRIP_n* - routine to initialize the SURFACE-TRIP coupling 00009 !! 00010 !! PURPOSE 00011 !! ------- 00012 !! 00013 !!** METHOD 00014 !! ------ 00015 !! 00016 !! EXTERNAL 00017 !! -------- 00018 !! 00019 !! 00020 !! IMPLICIT ARGUMENTS 00021 !! ------------------ 00022 !! 00023 !! REFERENCE 00024 !! --------- 00025 !! 00026 !! 00027 !! AUTHOR 00028 !! ------ 00029 !! B. Decharme *Meteo France* 00030 !! 00031 !! MODIFICATIONS 00032 !! ------------- 00033 !! Original 05/2008 00034 !------------------------------------------------------------------------------- 00035 ! 00036 !* 0. DECLARATIONS 00037 ! ------------ 00038 ! 00039 USE MODD_CSTS, ONLY : XDAY 00040 ! 00041 USE MODD_SURFEX_MPI, ONLY : NPROC 00042 USE MODD_SURFEX_OMP, ONLY : NBLOCKTOT 00043 ! 00044 USE MODI_GET_LUOUT 00045 USE MODI_GET_CONF_ISBA_n 00046 ! 00047 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00048 USE PARKIND1 ,ONLY : JPRB 00049 ! 00050 USE MODI_ABOR1_SFX 00051 USE MODI_INI_CSTS 00052 USE MODI_INIT_COUPLING_SURF_TRIP_n 00053 USE MODI_INIT_TRIP_n 00054 ! 00055 IMPLICIT NONE 00056 ! 00057 !* 0.1 Declarations of arguments 00058 ! ------------------------- 00059 ! 00060 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes 00061 LOGICAL, INTENT(IN) :: ORESTART 00062 INTEGER, INTENT(IN) :: KI ! Surfex grid dimension 00063 INTEGER, INTENT(IN) :: KSW ! Number of spectral bands 00064 INTEGER, INTENT(IN) :: KYEAR ! current year (UTC) 00065 INTEGER, INTENT(IN) :: KMONTH ! current month (UTC) 00066 REAL, INTENT(IN) :: PDURATION 00067 INTEGER, INTENT(OUT) :: KTRIP_MONTH ! current output month (UTC) 00068 INTEGER, INTENT(OUT) :: KTRIP_COUNT ! current TRIP counter 00069 ! 00070 REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! solar zenithal angle 00071 REAL, DIMENSION(KI), INTENT(IN) :: PSW_BANDS ! middle wavelength of each band 00072 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB ! direct albedo for each band 00073 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB ! diffuse albedo for each band 00074 REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity 00075 REAL, DIMENSION(KI), INTENT(OUT) :: PTSRAD ! radiative temperature 00076 ! 00077 !* 0.2 Declarations of local variables 00078 ! ------------------------------- 00079 ! 00080 CHARACTER(LEN=10) :: YGRID 00081 ! 00082 LOGICAL :: LTRIP 00083 LOGICAL :: LFLOOD 00084 ! 00085 INTEGER :: IDIMTAB 00086 INTEGER :: ILUOUT 00087 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00088 ! 00089 !------------------------------------------------------------------------------- 00090 ! 00091 IF (LHOOK) CALL DR_HOOK('INIT_SURF_TRIP_N',0,ZHOOK_HANDLE) 00092 CALL INI_CSTS 00093 ! 00094 CALL GET_LUOUT(HPROGRAM,ILUOUT) 00095 ! 00096 ! * 1. Get ISBA configuration 00097 ! 00098 CALL GET_CONF_ISBA_n(LTRIP,LFLOOD,YGRID,IDIMTAB) 00099 ! 00100 ! * 2. Initialyse TRIP 00101 ! 00102 IF(.NOT.LTRIP)THEN 00103 ! 00104 IF(LFLOOD)THEN 00105 CALL ABOR1_SFX('INIT_SURF_TRIPN: LFLOOD=T BUT LTRIP=F') 00106 ENDIF 00107 ! 00108 ELSE 00109 ! 00110 IF (NPROC>1) CALL ABOR1_SFX('INIT_SURF_TRIPN: TRIP CANNOT RUN WITH MORE THAN 1 MPI TASK') 00111 IF (NBLOCKTOT>1) CALL ABOR1_SFX("INIT_SURF_TRIPN: TRIP CANNOT RUN WITH NUMEROUS OPENMP BLOCKS") 00112 ! 00113 KTRIP_MONTH=0 00114 IF(PDURATION/XDAY<=31.)THEN 00115 KTRIP_MONTH=KMONTH 00116 ELSEIF(PDURATION/XDAY>366.)THEN 00117 CALL ABOR1_SFX('Trip output time can not be superior to one year per run') 00118 ENDIF 00119 ! 00120 KTRIP_COUNT = 0 00121 ! 00122 CALL INIT_TRIP_n(HPROGRAM,KYEAR,KTRIP_MONTH,ORESTART) 00123 ! 00124 ! * 3. Test and initialyse Surface-TRIP coupling 00125 ! 00126 CALL INIT_COUPLING_SURF_TRIP_n(HPROGRAM,KI,KSW,LFLOOD,YGRID,IDIMTAB,PZENITH,& 00127 PSW_BANDS,PEMIS,PTSRAD,PDIR_ALB,PSCA_ALB ) 00128 ! 00129 ENDIF 00130 IF (LHOOK) CALL DR_HOOK('INIT_SURF_TRIP_N',1,ZHOOK_HANDLE) 00131 ! 00132 !------------------------------------------------------------------------------- 00133 ! 00134 END SUBROUTINE INIT_SURF_TRIP_n