SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE DIAG_INLINE_ISBA_n (PTA, PTS, PQA, PPA, PPS, PRHOA, PZONA, PMERA, & 00003 PHT, PHW, PCD, PCDN, PCH, PRI, PHU, PZ0, PZ0H, & 00004 PZ0EFF, PSFTH, PSFTQ, PSFZON, PSFMER, PQS, & 00005 PDIR_ALB, PSCA_ALB, PDIR_SW, PSCA_SW, PLW, PRN ) 00006 ! ############################################################################### 00007 ! 00008 !!**** *DIAG_INLINE_ISBA_n * - computes diagnostics during ISBA time-step 00009 !! 00010 !! PURPOSE 00011 !! ------- 00012 ! 00013 !!** METHOD 00014 !! ------ 00015 !! 00016 !! REFERENCE 00017 !! --------- 00018 !! 00019 !! 00020 !! AUTHOR 00021 !! ------ 00022 !! V. Masson 00023 !! 00024 !! MODIFICATIONS 00025 !! ------------- 00026 !! Original 01/2004 00027 !! B. Decharme 08/2009 caculate cumulated diag LSURF_BUDGETC 00028 !! S. Riette 06/2009 CLS_2M becomes CLS_TQ, CLS_TQ and CLS_WIND have one 00029 !! more argument (height of diagnostic) 00030 !!------------------------------------------------------------------ 00031 ! 00032 00033 ! 00034 ! 00035 USE MODD_SURF_PAR, ONLY : XUNDEF 00036 USE MODD_ISBA_n, ONLY : LCANOPY 00037 USE MODD_DIAG_ISBA_n, ONLY : N2M, LCOEF, LSURF_VARS, LSURF_BUDGET 00038 USE MODD_DIAG_EVAP_ISBA_n, ONLY : LSURF_BUDGETC 00039 USE MODD_PACK_DIAG_ISBA, ONLY : XP_T2M, XP_Q2M, XP_HU2M, XP_ZON10M, XP_MER10M, & 00040 XP_CD, XP_CH, XP_CE, XP_RI, XP_Z0_WITH_SNOW, & 00041 XP_Z0H_WITH_SNOW, XP_Z0EFF, XP_QS, & 00042 XP_SWD, XP_SWU, XP_SWBD, XP_SWBU, & 00043 XP_LWD, XP_LWU, XP_FMU, XP_FMV 00044 ! 00045 USE MODI_PARAM_CLS 00046 USE MODI_CLS_TQ 00047 USE MODI_CLS_WIND 00048 USE MODI_DIAG_SURF_BUDGET_ISBA 00049 ! 00050 ! 00051 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00052 USE PARKIND1 ,ONLY : JPRB 00053 ! 00054 IMPLICIT NONE 00055 ! 00056 !* 0.1 declarations of arguments 00057 ! 00058 REAL, DIMENSION(:), INTENT(IN) :: PTA ! atmospheric temperature 00059 REAL, DIMENSION(:), INTENT(IN) :: PTS ! surface temperature 00060 REAL, DIMENSION(:), INTENT(IN) :: PQA ! atmospheric specific humidity 00061 REAL, DIMENSION(:), INTENT(IN) :: PPA ! atmospheric level pressure 00062 REAL, DIMENSION(:), INTENT(IN) :: PPS ! surface pressure 00063 REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density 00064 REAL, DIMENSION(:), INTENT(IN) :: PZONA ! zonal wind 00065 REAL, DIMENSION(:), INTENT(IN) :: PMERA ! meridian wind 00066 REAL, DIMENSION(:), INTENT(IN) :: PHT ! atmospheric level height 00067 REAL, DIMENSION(:), INTENT(IN) :: PHW ! atmospheric level height for wind 00068 REAL, DIMENSION(:), INTENT(IN) :: PCD ! drag coefficient for momentum 00069 REAL, DIMENSION(:), INTENT(IN) :: PCDN ! neutral drag coefficient 00070 REAL, DIMENSION(:), INTENT(IN) :: PCH ! drag coefficient for heat 00071 REAL, DIMENSION(:), INTENT(IN) :: PRI ! Richardson number 00072 REAL, DIMENSION(:), INTENT(IN) :: PHU ! near-surface humidity 00073 REAL, DIMENSION(:), INTENT(IN) :: PZ0 ! roughness length for momentum 00074 REAL, DIMENSION(:), INTENT(IN) :: PZ0H ! roughness length for heat 00075 REAL, DIMENSION(:), INTENT(IN) :: PZ0EFF ! effective roughness length (z0+z0rel) 00076 REAL, DIMENSION(:), INTENT(IN) :: PQS ! humidity at surface 00077 REAL, DIMENSION(:,:), INTENT(IN) :: PDIR_ALB ! direct albedo for each spectral band 00078 REAL, DIMENSION(:,:), INTENT(IN) :: PSCA_ALB ! diffuse albedo for each spectral band (-) 00079 REAL, DIMENSION(:,:), INTENT(IN) :: PDIR_SW ! direct solar radiation (on horizontal surf.) 00080 REAL, DIMENSION(:,:), INTENT(IN) :: PSCA_SW ! diffuse solar radiation (on horizontal surf.) 00081 REAL, DIMENSION(:), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.) 00082 REAL, DIMENSION(:), INTENT(IN) :: PRN ! Surface net radiation 00083 ! 00084 REAL, DIMENSION(:), INTENT(IN) :: PSFZON ! zonal friction 00085 REAL, DIMENSION(:), INTENT(IN) :: PSFMER ! meridian friction 00086 REAL, DIMENSION(:), INTENT(IN) :: PSFTH ! heat flux (W/m2) 00087 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ ! water flux (kg/m2/s) 00088 ! 00089 !* 0.2 declarations of local variables 00090 ! 00091 REAL, DIMENSION(SIZE(PTA)) :: ZH 00092 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00093 !------------------------------------------------------------------------------------- 00094 ! 00095 IF (LHOOK) CALL DR_HOOK('DIAG_INLINE_ISBA_N',0,ZHOOK_HANDLE) 00096 IF (.NOT. LCANOPY) THEN 00097 ! 00098 IF (N2M==1) THEN 00099 CALL PARAM_CLS(PTA, PTS, PQA, PPA, PRHOA, PZONA, PMERA, PHT, PHW, & 00100 PSFTH, PSFTQ, PSFZON, PSFMER, & 00101 XP_T2M, XP_Q2M, XP_HU2M, XP_ZON10M, XP_MER10M ) 00102 XP_RI = PRI 00103 ELSE IF (N2M==2) THEN 00104 ZH(:)=2. 00105 CALL CLS_TQ(PTA, PQA, PPA, PPS, PHT, & 00106 PCD, PCH, PRI, & 00107 PTS, PHU, PZ0H, ZH, & 00108 XP_T2M, XP_Q2M, XP_HU2M ) 00109 ZH(:)=10. 00110 CALL CLS_WIND(PZONA, PMERA, PHW, & 00111 PCD, PCDN, PRI, ZH, & 00112 XP_ZON10M, XP_MER10M ) 00113 XP_RI = PRI 00114 END IF 00115 ! 00116 ELSE 00117 ! 00118 IF (N2M>=1) THEN 00119 XP_T2M = XUNDEF 00120 XP_Q2M = XUNDEF 00121 XP_HU2M = XUNDEF 00122 XP_ZON10M = XUNDEF 00123 XP_MER10M = XUNDEF 00124 XP_RI = PRI 00125 ENDIF 00126 ! 00127 ENDIF 00128 ! 00129 IF (LSURF_BUDGET.OR.LSURF_BUDGETC) THEN 00130 ! 00131 CALL DIAG_SURF_BUDGET_ISBA(PDIR_SW, PSCA_SW, PDIR_ALB, PSCA_ALB, & 00132 PLW, PRN, & 00133 XP_SWD, XP_SWU, XP_SWBD, XP_SWBU, & 00134 XP_LWD, XP_LWU ) 00135 ! 00136 XP_FMU = PSFZON 00137 XP_FMV = PSFMER 00138 ! 00139 END IF 00140 ! 00141 IF (LCOEF) THEN 00142 ! 00143 !* Transfer coefficient 00144 ! 00145 XP_CD = PCD 00146 XP_CH = PCH 00147 XP_CE = PCH 00148 ! 00149 !* Roughness lengths 00150 ! 00151 XP_Z0_WITH_SNOW = PZ0 00152 XP_Z0H_WITH_SNOW = PZ0H 00153 XP_Z0EFF = PZ0EFF 00154 ! 00155 ENDIF 00156 ! 00157 IF (LSURF_VARS) THEN 00158 ! 00159 !* Humidity at surface 00160 ! 00161 XP_QS = PQS 00162 ! 00163 ENDIF 00164 IF (LHOOK) CALL DR_HOOK('DIAG_INLINE_ISBA_N',1,ZHOOK_HANDLE) 00165 ! 00166 !------------------------------------------------------------------------------------- 00167 ! 00168 END SUBROUTINE DIAG_INLINE_ISBA_n