SURFEX v8.1
General documentation of Surfex
diag_surf_budget_water.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE diag_surf_budget_water (D, PTT, PTS, PRHOA, PSFTH, PSFTQ, PDIR_SW, PSCA_SW, PLW, &
7  PDIR_ALB, PSCA_ALB, PEMIS, PTRAD, PSFZON, PSFMER )
8 ! ###############################################################################
9 !
10 !!**** *DIAG_SURF_BUDGET_WATER * - Computes diagnostics over water
11 !!
12 !! PURPOSE
13 !! -------
14 !
15 !!** METHOD
16 !! ------
17 !!
18 !! REFERENCE
19 !! ---------
20 !!
21 !!
22 !! AUTHOR
23 !! ------
24 !! V. Masson
25 !!
26 !! MODIFICATIONS
27 !! -------------
28 !! Original 01/2004
29 ! B. decharme 04/2013 : Add EVAP and SUBL diag
30 ! Ts instead of Tsrad
31 !!------------------------------------------------------------------
32 !
33 USE modd_diag_n, ONLY : diag_t
34 !
35 USE modd_csts, ONLY : xstefan, xlstt, xlvtt, xcpd
36 !
37 !
38 !
39 USE yomhook ,ONLY : lhook, dr_hook
40 USE parkind1 ,ONLY : jprb
41 !
42 IMPLICIT NONE
43 !
44 !* 0.1 declarations of arguments
45 !
46 TYPE(diag_t), INTENT(INOUT) :: D
47 !
48 REAL, INTENT(IN) :: PTT ! freezing temperature of water surface
49 REAL, DIMENSION(:), INTENT(IN) :: PTS ! surface temperature (K)
50 REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density
51 REAL, DIMENSION(:), INTENT(IN) :: PSFTH ! heat flux
52 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ ! water flux
53 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_SW ! direct solar radiation (on horizontal surf.)
54 ! ! (W/m2)
55 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
56 ! ! (W/m2)
57 REAL, DIMENSION(:), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.)
58 REAL, DIMENSION(:), INTENT(IN) :: PTRAD ! radiative temperature (K)
59 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_ALB ! direct albedo for each spectral band (-)
60 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_ALB ! diffuse albedo for each spectral band (-)
61 REAL, DIMENSION(:), INTENT(IN) :: PEMIS ! emissivity (-)
62 REAL, DIMENSION(:), INTENT(IN) :: PSFZON ! zonal friction
63 REAL, DIMENSION(:), INTENT(IN) :: PSFMER ! meridional friction
64 !
65 !* 0.2 declarations of local variables
66 !
67 INTEGER :: ISWB ! number of SW bands
68 INTEGER :: JSWB ! loop counter on number of SW bands
69 REAL(KIND=JPRB) :: ZHOOK_HANDLE
70 !-------------------------------------------------------------------------------------
71 !
72 !
73 IF (lhook) CALL dr_hook('DIAG_SURF_BUDGET_WATER',0,zhook_handle)
74 iswb = SIZE(pdir_sw,2)
75 !
76 !* total incoming and outgoing SW
77 !
78 DO jswb=1,iswb
79  d%XSWBD(:,jswb) = pdir_sw(:,jswb) + psca_sw(:,jswb)
80  d%XSWBU(:,jswb) = pdir_sw(:,jswb) * pdir_alb(:,jswb) + psca_sw(:,jswb) * psca_alb(:,jswb)
81 ENDDO
82 !
83 d%XSWD(:) = 0.
84 d%XSWU(:) = 0.
85 DO jswb=1,iswb
86  d%XSWD(:)=d%XSWD(:)+d%XSWBD(:,jswb)
87  d%XSWU(:)=d%XSWU(:)+d%XSWBU(:,jswb)
88 ENDDO
89 !
90 !*incoming outgoing LW
91 !
92 d%XLWD(:) = plw(:)
93 d%XLWU(:) = pemis(:)*xstefan*ptrad(:)**4 + (1.-pemis(:))*plw(:)
94 !
95 !* net radiation
96 !
97 d%XRN = d%XSWD(:) - d%XSWU(:) + d%XLWD(:) - d%XLWU(:)
98 !
99 !* sensible heat flux
100 !
101 d%XH = psfth(:)
102 !
103 !* latent heat flux
104 !
105 WHERE (pts<ptt )
106  d%XLE = psftq * xlstt
107  d%XLEI = psftq * xlstt
108  d%XEVAP = psftq
109  d%XSUBL = psftq
110 ELSEWHERE
111  d%XLE = psftq * xlvtt
112  d%XLEI = 0.0
113  d%XEVAP = psftq
114  d%XSUBL = 0.0
115 END WHERE
116 !
117 !* storage flux
118 !
119 d%XGFLUX = d%XRN - d%XH - d%XLE
120 !
121 !* wind stress
122 !
123 d%XFMU = psfzon
124 !
125 d%XFMV = psfmer
126 IF (lhook) CALL dr_hook('DIAG_SURF_BUDGET_WATER',1,zhook_handle)
127 !
128 !-------------------------------------------------------------------------------------
129 !
130 END SUBROUTINE diag_surf_budget_water
subroutine diag_surf_budget_water(D, PTT, PTS, PRHOA, PSFTH, PSFTQ, PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PEMIS, PTRAD, PSFZON, PSFMER)
real, save xcpd
Definition: modd_csts.F90:63
real, save xstefan
Definition: modd_csts.F90:59
real, save xlvtt
Definition: modd_csts.F90:70
real, save xlstt
Definition: modd_csts.F90:71
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15