SURFEX v8.1
General documentation of Surfex
diag_surf_budget_sea.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_sea(D, DI, S, PTT, PRHOA, PSFTH, PSFTH_ICE, &
7  PSFTQ, PSFTQ_ICE, PDIR_SW, PSCA_SW, PLW, &
8  PDIR_ALB, PSCA_ALB, PEMIS, PTRAD, &
9  PSFZON, PSFZON_ICE, PSFMER, PSFMER_ICE )
10 
11 
12 ! ###############################################################################
13 !
14 !!**** *DIAG_SURF_BUDGET_WATER * - Computes diagnostics over water
15 !!
16 !! PURPOSE
17 !! -------
18 !
19 !!** METHOD
20 !! ------
21 !!
22 !! REFERENCE
23 !! ---------
24 !!
25 !!
26 !! AUTHOR
27 !! ------
28 !! V. Masson
29 !!
30 !! MODIFICATIONS
31 !! -------------
32 !! Original 01/2004
33 ! B. decharme 04/2013 : Add EVAP and SUBL diag
34 ! S.Senesi 01/2014 : Handle fluxes on seaice
35 !!------------------------------------------------------------------
36 !
37 USE modd_seaflux_n, ONLY : seaflux_t
38 USE modd_diag_n, ONLY : diag_t
39 !
40 USE modd_csts, ONLY : xstefan, xlstt, xlvtt
42 !
43 !
44 USE yomhook ,ONLY : lhook, dr_hook
45 USE parkind1 ,ONLY : jprb
46 USE modi_abor1_sfx
47 !
48 IMPLICIT NONE
49 !
50 !* 0.1 declarations of arguments
51 !
52 TYPE(diag_t), INTENT(INOUT) :: D
53 TYPE(diag_t), INTENT(INOUT) :: DI
54 TYPE(seaflux_t), INTENT(INOUT) :: S
55 !
56 REAL, INTENT(IN) :: PTT ! freezing temperature of water surface
57 REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density
58 REAL, DIMENSION(:), INTENT(IN) :: PSFTH ! heat flux
59 REAL, DIMENSION(:), INTENT(IN) :: PSFTH_ICE ! heat flux on seaice
60 !
61 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ ! water flux
62 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ_ICE ! water flux on seaice
63 !
64 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_SW ! direct solar radiation (on horizontal surf.)
65 ! ! (W/m2)
66 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
67 ! ! (W/m2)
68 REAL, DIMENSION(:), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.)
69 !
70 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_ALB ! direct albedo for each spectral band (-)
71 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_ALB ! diffuse albedo for each spectral band (-)
72 REAL, DIMENSION(:), INTENT(IN) :: PEMIS ! emissivity (-)
73 REAL, DIMENSION(:), INTENT(IN) :: PTRAD ! radiative temperature (K)
74 !
75 REAL, DIMENSION(:), INTENT(IN) :: PSFZON ! zonal friction
76 REAL, DIMENSION(:), INTENT(IN) :: PSFZON_ICE! zonal friction
77 REAL, DIMENSION(:), INTENT(IN) :: PSFMER ! meridional friction
78 REAL, DIMENSION(:), INTENT(IN) :: PSFMER_ICE! meridional friction
79 !
80 !* 0.2 declarations of local variables
81 !
82 INTEGER :: I
83 INTEGER :: ISWB ! number of SW bands
84 INTEGER :: JSWB ! loop counter on number of SW bands
85 REAL(KIND=JPRB) :: ZHOOK_HANDLE
86 !-------------------------------------------------------------------------------------
87 !
88 IF (lhook) CALL dr_hook('DIAG_SURF_BUDGET_SEA',0,zhook_handle)
89 !
90 iswb = SIZE(pdir_sw,2)
91 !
92 !* total incoming and outgoing SW
93 !
94 DO jswb=1,iswb
95  d%XSWBD(:,jswb) = pdir_sw(:,jswb) + psca_sw(:,jswb)
96  d%XSWBU(:,jswb) = pdir_sw(:,jswb) * pdir_alb(:,jswb) + psca_sw(:,jswb) * psca_alb(:,jswb)
97 ENDDO
98 !
99 d%XSWD(:) = 0.
100 d%XSWU(:) = 0.
101 DO jswb=1,iswb
102  d%XSWD(:) = d%XSWD(:) + d%XSWBD(:,jswb)
103  d%XSWU(:) = d%XSWU(:) + d%XSWBU(:,jswb)
104 ENDDO
105 !
106 !*incoming outgoing LW
107 !
108 d%XLWD(:)=plw(:)
109 d%XLWU(:)=pemis(:)*xstefan*ptrad(:)**4 + (1.-pemis(:))*plw(:)
110 !
111 !* net radiation
112 !
113 d%XRN(:) = d%XSWD(:) - d%XSWU(:) + d%XLWD(:) - d%XLWU (:)
114 !
115 IF (.NOT.s%LHANDLE_SIC) THEN
116  !
117  !* sensible heat flux
118  !
119  d%XH = psfth
120  !
121  !* latent heat flux
122  !
123  WHERE (s%XSST<ptt )
124  d%XLE = psftq * xlstt
125  d%XLEI = psftq * xlstt
126  d%XEVAP = psftq
127  d%XSUBL = psftq
128  ELSEWHERE
129  d%XLE = psftq * xlvtt
130  d%XLEI = 0.0
131  d%XEVAP = psftq
132  d%XSUBL = 0.0
133  END WHERE
134  !
135  !* wind stress
136  !
137  d%XFMU = psfzon
138  d%XFMV = psfmer
139  !
140 ELSE
141  !
142  !----------------------------------------------------------------------------
143  ! Sea ice or mixed diag
144  !----------------------------------------------------------------------------
145  !
146  !
147  !* total incoming and outgoing SW
148  !
149  DO jswb=1,iswb
150  di%XSWBU(:,jswb) = (pdir_sw(:,jswb) + psca_sw(:,jswb)) * s%XICE_ALB(:)
151  ENDDO
152  !
153  di%XSWU(:) = 0.
154  DO jswb=1,iswb
155  di%XSWU(:) = di%XSWU(:) + di%XSWBU(:,jswb)
156  ENDDO
157  !
158  !*incoming outgoing LW
159  !
160  di%XLWU(:)=xemiswatice*xstefan*s%XTICE(:)**4 + (1.-xemiswatice)*plw(:)
161  !
162  !* net radiation
163  !
164  di%XRN(:) = d%XSWD(:) - di%XSWU(:) + d%XLWD(:) - di%XLWU(:)
165  !
166  !* sensible heat flux
167  !
168  d%XH = (1 - s%XSIC) * psfth + s%XSIC * psfth_ice
169  di%XH = psfth_ice
170  !
171  !* latent heat flux
172  !
173  d%XLE = (1 - s%XSIC) * psftq * xlvtt + s%XSIC * psftq_ice * xlstt
174  d%XLEI = psftq_ice * xlstt
175  d%XEVAP = (1 - s%XSIC) * psftq + s%XSIC * psftq_ice
176  d%XSUBL = s%XSIC * psftq_ice
177  !
178  !* ice storage flux
179  !
180  di%XGFLUX = di%XRN - di%XH - d%XLEI
181  !
182  !* wind stress
183  !
184  d%XFMU = (1 - s%XSIC) * psfzon + s%XSIC * psfzon_ice
185  di%XFMU = psfzon_ice
186  d%XFMV = (1 - s%XSIC) * psfmer + s%XSIC * psfmer_ice
187  di%XFMV = psfmer_ice
188 !
189 ENDIF
190 !
191 !* total storage flux
192 !
193 d%XGFLUX = d%XRN - d%XH - d%XLE
194 !
195 !
196 IF (lhook) CALL dr_hook('DIAG_SURF_BUDGET_SEA',1,zhook_handle)
197 !
198 !-------------------------------------------------------------------------------------
199 !
200 END SUBROUTINE diag_surf_budget_sea
subroutine diag_surf_budget_sea(D, DI, S, PTT, PRHOA, PSFTH, PSFTH_ICE, PSFTQ, PSFTQ_ICE, PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PEMIS, PTRAD, PSFZON, PSFZON_ICE, PSFMER, PSFMER_ICE)
real, save xstefan
Definition: modd_csts.F90:59
real, save xalbseaice
real, save xemiswatice
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