SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE DIAG_SURF_BUDGET_SEA (PTT , PTS, PRHOA, PSFTH, PSFTQ, & 00003 PDIR_SW, PSCA_SW, PLW, & 00004 PDIR_ALB, PSCA_ALB, PEMIS, PTRAD, & 00005 PSFZON, PSFMER, & 00006 PRN, PH, PLE, PLEI, PGFLUX, & 00007 PSWD, PSWU, PSWBD, PSWBU, PLWD, PLWU, & 00008 PFMU, PFMV ) 00009 ! ############################################################################### 00010 ! 00011 !!**** *DIAG_SURF_BUDGET_WATER * - Computes diagnostics over water 00012 !! 00013 !! PURPOSE 00014 !! ------- 00015 ! 00016 !!** METHOD 00017 !! ------ 00018 !! 00019 !! REFERENCE 00020 !! --------- 00021 !! 00022 !! 00023 !! AUTHOR 00024 !! ------ 00025 !! V. Masson 00026 !! 00027 !! MODIFICATIONS 00028 !! ------------- 00029 !! Original 01/2004 00030 !!------------------------------------------------------------------ 00031 ! 00032 00033 ! 00034 ! 00035 USE MODD_CSTS, ONLY : XSTEFAN, XLSTT, XLVTT, XCPD, XCPV, XCL 00036 ! 00037 ! 00038 ! 00039 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00040 USE PARKIND1 ,ONLY : JPRB 00041 ! 00042 IMPLICIT NONE 00043 ! 00044 !* 0.1 declarations of arguments 00045 ! 00046 REAL, INTENT(IN) :: PTT ! freezing temperature of water surface 00047 REAL, DIMENSION(:), INTENT(IN) :: PTS ! surface temperature (K) 00048 REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density 00049 REAL, DIMENSION(:), INTENT(IN) :: PSFTH ! heat flux 00050 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ ! water flux 00051 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_SW ! direct solar radiation (on horizontal surf.) 00052 ! ! (W/m2) 00053 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_SW ! diffuse solar radiation (on horizontal surf.) 00054 ! ! (W/m2) 00055 REAL, DIMENSION(:), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.) 00056 REAL, DIMENSION(:), INTENT(IN) :: PTRAD ! radiative temperature (K) 00057 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_ALB ! direct albedo for each spectral band (-) 00058 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_ALB ! diffuse albedo for each spectral band (-) 00059 REAL, DIMENSION(:), INTENT(IN) :: PEMIS ! emissivity (-) 00060 REAL, DIMENSION(:), INTENT(IN) :: PSFZON ! zonal friction 00061 REAL, DIMENSION(:), INTENT(IN) :: PSFMER ! meridional friction 00062 ! 00063 REAL, DIMENSION(:), INTENT(OUT):: PRN ! net radiation (W/m2) 00064 REAL, DIMENSION(:), INTENT(OUT):: PH ! sensible heat flux (W/m2) 00065 REAL, DIMENSION(:), INTENT(OUT):: PLE ! total latent heat flux (W/m2) 00066 REAL, DIMENSION(:), INTENT(OUT):: PLEI ! sublimation latent heat flux (W/m2) 00067 REAL, DIMENSION(:), INTENT(OUT):: PGFLUX ! storage flux (W/m2) 00068 ! 00069 REAL, DIMENSION(:,:), INTENT(OUT):: PSWBD ! incoming short wave radiation by spectral band (W/m2) 00070 REAL, DIMENSION(:,:), INTENT(OUT):: PSWBU ! upward short wave radiation by spectral band (W/m2) 00071 REAL, DIMENSION(:), INTENT(OUT):: PSWD ! total incoming short wave radiation (W/m2) 00072 REAL, DIMENSION(:), INTENT(OUT):: PSWU ! total upward short wave radiation (W/m2) 00073 REAL, DIMENSION(:), INTENT(OUT):: PLWD ! Downward long wave radiation (W/m2) 00074 REAL, DIMENSION(:), INTENT(OUT):: PLWU ! upward long wave radiation (W/m2) 00075 REAL, DIMENSION(:), INTENT(OUT):: PFMU ! zonal wind stress 00076 REAL, DIMENSION(:), INTENT(OUT):: PFMV ! meridian wind stress 00077 ! 00078 !* 0.2 declarations of local variables 00079 ! 00080 INTEGER :: ISWB ! number of SW bands 00081 INTEGER :: JSWB ! loop counter on number of SW bands 00082 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00083 !------------------------------------------------------------------------------------- 00084 ! 00085 ! 00086 IF (LHOOK) CALL DR_HOOK('DIAG_SURF_BUDGET_SEA',0,ZHOOK_HANDLE) 00087 ISWB = SIZE(PDIR_SW,2) 00088 ! 00089 !* total incoming and outgoing SW 00090 ! 00091 DO JSWB=1,ISWB 00092 PSWBD(:,JSWB) = PDIR_SW(:,JSWB) + PSCA_SW(:,JSWB) 00093 PSWBU(:,JSWB) = PDIR_SW(:,JSWB) * PDIR_ALB(:,JSWB) + PSCA_SW(:,JSWB) * PSCA_ALB(:,JSWB) 00094 ENDDO 00095 ! 00096 PSWD(:) = 0. 00097 PSWU(:) = 0. 00098 DO JSWB=1,ISWB 00099 PSWD(:)=PSWD(:)+PSWBD(:,JSWB) 00100 PSWU(:)=PSWU(:)+PSWBU(:,JSWB) 00101 ENDDO 00102 ! 00103 !*incoming outgoing LW 00104 ! 00105 PLWD(:)=PLW(:) 00106 PLWU(:)=PEMIS(:)*XSTEFAN*PTRAD(:)**4 + (1.-PEMIS(:))*PLW(:) 00107 ! 00108 !* net radiation 00109 ! 00110 PRN = PSWD(:) - PSWU(:) + PLWD(:) - PLWU(:) 00111 ! 00112 !* sensible heat flux 00113 ! 00114 PH = PSFTH(:) 00115 ! 00116 !* latent heat flux 00117 ! 00118 WHERE (PTRAD<PTT ) 00119 PLE = PSFTQ * XLSTT 00120 PLEI = PSFTQ * XLSTT 00121 ELSEWHERE 00122 PLE = PSFTQ * XLVTT 00123 PLEI = 0.0 00124 END WHERE 00125 ! 00126 !* storage flux 00127 ! 00128 PGFLUX = PRN - PH - PLE 00129 ! 00130 !* wind stress 00131 ! 00132 PFMU = PSFZON 00133 ! 00134 PFMV = PSFMER 00135 IF (LHOOK) CALL DR_HOOK('DIAG_SURF_BUDGET_SEA',1,ZHOOK_HANDLE) 00136 ! 00137 !------------------------------------------------------------------------------------- 00138 ! 00139 END SUBROUTINE DIAG_SURF_BUDGET_SEA