SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
diag_inline_watfluxn.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_inline_watflux_n (DGW, W, &
7  ptstep, pta, pqa, ppa, pps, prhoa, pzona, &
8  pmera, pht, phw, pcd, pcdn, pch, pri, phu, &
9  pz0h, pqsat, psfth, psftq, psfzon, psfmer, &
10  pdir_sw, psca_sw, plw, pdir_alb, psca_alb, &
11  pemis, ptrad, prain, psnow, psfth_ice, &
12  psftq_ice )
13 ! ###############################################################################
14 !
15 !!**** *DIAG_INLINE_WATFLUX_n * - computes diagnostics during WATFLUX time-step
16 !!
17 !! PURPOSE
18 !! -------
19 !
20 !!** METHOD
21 !! ------
22 !!
23 !! REFERENCE
24 !! ---------
25 !!
26 !!
27 !! AUTHOR
28 !! ------
29 !! V. Masson
30 !!
31 !! MODIFICATIONS
32 !! -------------
33 !! Original 01/2004
34 !! B. Decharme 08/2009 : Diag for Earth System Model Coupling
35 !! S. Riette 06/2009 CLS_2M becomes CLS_TQ, CLS_TQ and CLS_WIND have one
36 !! more argument (height of diagnostic)
37 ! B. decharme 04/2013 : Add EVAP and SUBL diag
38 !!------------------------------------------------------------------
39 !
40 
41 !
42 !
43 !
45 USE modd_watflux_n, ONLY : watflux_t
46 !
47 USE modd_csts, ONLY : xtt
48 USE modd_surf_par, ONLY : xundef
49 USE modd_sfx_oasis, ONLY : lcpl_sea, lcpl_seaice
50 !
51 USE modi_param_cls
52 USE modi_cls_tq
53 USE modi_cls_wind
54 USE modi_diag_surf_budget_water
55 USE modi_diag_surf_budgetc_water
56 USE modi_diag_cpl_esm_water
57 !
58 !
59 USE yomhook ,ONLY : lhook, dr_hook
60 USE parkind1 ,ONLY : jprb
61 !
62 IMPLICIT NONE
63 !
64 !* 0.1 declarations of arguments
65 !
66 !
67 TYPE(diag_watflux_t), INTENT(INOUT) :: dgw
68 TYPE(watflux_t), INTENT(INOUT) :: w
69 !
70 REAL, INTENT(IN) :: ptstep ! atmospheric time-step (s)
71 REAL, DIMENSION(:), INTENT(IN) :: pta ! atmospheric temperature
72 REAL, DIMENSION(:), INTENT(IN) :: pqa ! atmospheric specific humidity
73 REAL, DIMENSION(:), INTENT(IN) :: ppa ! atmospheric level pressure
74 REAL, DIMENSION(:), INTENT(IN) :: pps ! surface pressure
75 REAL, DIMENSION(:), INTENT(IN) :: prhoa ! air density
76 REAL, DIMENSION(:), INTENT(IN) :: pzona ! zonal wind
77 REAL, DIMENSION(:), INTENT(IN) :: pmera ! meridian wind
78 REAL, DIMENSION(:), INTENT(IN) :: pht ! atmospheric level height
79 REAL, DIMENSION(:), INTENT(IN) :: phw ! atmospheric level height for wind
80 REAL, DIMENSION(:), INTENT(IN) :: pcd ! drag coefficient for momentum
81 REAL, DIMENSION(:), INTENT(IN) :: pcdn ! neutral drag coefficient
82 REAL, DIMENSION(:), INTENT(IN) :: pch ! drag coefficient for heat
83 REAL, DIMENSION(:), INTENT(IN) :: pri ! Richardson number
84 REAL, DIMENSION(:), INTENT(IN) :: phu ! near-surface humidity
85 REAL, DIMENSION(:), INTENT(IN) :: pz0h ! roughness length for heat
86 REAL, DIMENSION(:), INTENT(IN) :: pqsat ! humidity at saturation
87 REAL, DIMENSION(:), INTENT(IN) :: psfzon ! zonal friction
88 REAL, DIMENSION(:), INTENT(IN) :: psfmer ! meridian friction
89 REAL, DIMENSION(:), INTENT(IN) :: psfth ! heat flux (W/m2)
90 REAL, DIMENSION(:), INTENT(IN) :: psftq ! water flux (kg/m2/s)
91 REAL, DIMENSION(:,:),INTENT(IN):: pdir_sw ! direct solar radiation (on horizontal surf.)
92 ! ! (W/m2)
93 REAL, DIMENSION(:,:),INTENT(IN):: psca_sw ! diffuse solar radiation (on horizontal surf.)
94 ! ! (W/m2)
95 REAL, DIMENSION(:), INTENT(IN) :: plw ! longwave radiation (on horizontal surf.)
96 REAL, DIMENSION(:), INTENT(IN) :: ptrad ! radiative temperature (K)
97 REAL, DIMENSION(:,:),INTENT(IN):: pdir_alb ! direct albedo for each spectral band (-)
98 REAL, DIMENSION(:,:),INTENT(IN):: psca_alb ! diffuse albedo for each spectral band (-)
99 REAL, DIMENSION(:), INTENT(IN) :: pemis ! emissivity (-)
100 !
101 REAL, DIMENSION(:), INTENT(IN) :: prain ! Rainfall (kg/m2/s)
102 REAL, DIMENSION(:), INTENT(IN) :: psnow ! Snowfall (kg/m2/s)
103 REAL, DIMENSION(:), INTENT(IN) :: psfth_ice ! heat flux (W/m2)
104 REAL, DIMENSION(:), INTENT(IN) :: psftq_ice ! water flux (kg/m2/s)
105 !
106 !* 0.2 declarations of local variables
107 !
108 REAL, DIMENSION(SIZE(PTA)) :: zh
109 REAL(KIND=JPRB) :: zhook_handle
110 !-------------------------------------------------------------------------------------
111 !
112 IF (lhook) CALL dr_hook('DIAG_INLINE_WATFLUX_N',0,zhook_handle)
113 !
114 ! * Mean surface temperature need to couple with AGCM
115 !
116 dgw%XDIAG_TS(:) = w%XTS(:)
117 !
118 IF (.NOT. w%LSBL) THEN
119 !
120  IF (dgw%N2M==1) THEN
121  CALL param_cls(pta, w%XTS, pqa, ppa, prhoa, pzona, pmera, pht, phw, &
122  psfth, psftq, psfzon, psfmer, &
123  dgw%XT2M, dgw%XQ2M, dgw%XHU2M, dgw%XZON10M, dgw%XMER10M )
124  ELSE IF (dgw%N2M==2) THEN
125  zh(:)=2.
126  CALL cls_tq(pta, pqa, ppa, pps, pht, &
127  pcd, pch, pri, &
128  w%XTS, phu, pz0h, zh, &
129  dgw%XT2M, dgw%XQ2M, dgw%XHU2M )
130  zh(:)=10.
131  CALL cls_wind(pzona, pmera, phw, &
132  pcd, pcdn, pri, zh, &
133  dgw%XZON10M, dgw%XMER10M )
134  END IF
135 !
136  IF (dgw%N2M>=1) THEN
137  !
138  dgw%XT2M_MIN(:) = min(dgw%XT2M_MIN(:),dgw%XT2M(:))
139  dgw%XT2M_MAX(:) = max(dgw%XT2M_MAX(:),dgw%XT2M(:))
140  !
141  dgw%XHU2M_MIN(:) = min(dgw%XHU2M_MIN(:),dgw%XHU2M(:))
142  dgw%XHU2M_MAX(:) = max(dgw%XHU2M_MAX(:),dgw%XHU2M(:))
143  !
144  dgw%XWIND10M (:) = sqrt(dgw%XZON10M(:)**2+dgw%XMER10M(:)**2)
145  dgw%XWIND10M_MAX(:) = max(dgw%XWIND10M_MAX(:),dgw%XWIND10M(:))
146  !
147  !* Richardson number
148  dgw%XRI = pri
149  !
150  ENDIF
151 !
152 ELSE
153  IF (dgw%N2M>=1) THEN
154  dgw%XT2M = xundef
155  dgw%XQ2M = xundef
156  dgw%XHU2M = xundef
157  dgw%XZON10M = xundef
158  dgw%XMER10M = xundef
159  dgw%XRI = pri
160  ENDIF
161 ENDIF
162 !
163 IF (dgw%LSURF_BUDGET.OR.dgw%LSURF_BUDGETC) THEN
164  !
165  CALL diag_surf_budget_water(xtt, w%XTS, prhoa, psfth, psftq, &
166  pdir_sw, psca_sw, plw, &
167  pdir_alb, psca_alb, pemis, ptrad, &
168  psfzon, psfmer, &
169  dgw%XRN, dgw%XH, dgw%XLE, dgw%XLEI, dgw%XGFLUX, &
170  dgw%XSWD, dgw%XSWU, dgw%XSWBD, dgw%XSWBU, dgw%XLWD, dgw%XLWU, &
171  dgw%XFMU, dgw%XFMV, dgw%XEVAP, dgw%XSUBL )
172  !
173 END IF
174 !
175 IF(dgw%LSURF_BUDGETC)THEN
176  CALL diag_surf_budgetc_water(dgw, &
177  ptstep, dgw%XRN, dgw%XH, dgw%XLE, dgw%XLEI, dgw%XGFLUX, &
178  dgw%XSWD, dgw%XSWU, dgw%XLWD, dgw%XLWU, dgw%XFMU, dgw%XFMV,&
179  dgw%XEVAP, dgw%XSUBL )
180 ENDIF
181 !
182 IF (dgw%LCOEF) THEN
183  !
184  !* Transfer coefficients
185  !
186  dgw%XCD = pcd
187  dgw%XCH = pch
188  dgw%XCE = pch
189  !
190  !* Roughness lengths
191  !
192  dgw%XZ0 = w%XZ0
193  dgw%XZ0H = pz0h
194  !
195 ENDIF
196 !
197 IF (dgw%LSURF_VARS) THEN
198  !
199  !* Humidity at saturation
200  !
201  dgw%XQS = pqsat
202  !
203 ENDIF
204 !
205 ! Diag for Earth System Model coupling
206 !
207 IF (lcpl_sea) THEN
208 !
209  CALL diag_cpl_esm_water(w, &
210  lcpl_seaice,ptstep,dgw%XZON10M,dgw%XMER10M,dgw%XFMU,dgw%XFMV, &
211  dgw%XSWD,dgw%XSWU,dgw%XGFLUX,psftq,prain,psnow,plw,w%XTICE, &
212  psfth_ice,psftq_ice,pdir_sw,psca_sw )
213 !
214 ENDIF
215 IF (lhook) CALL dr_hook('DIAG_INLINE_WATFLUX_N',1,zhook_handle)
216 !
217 !-------------------------------------------------------------------------------------
218 !
219 END SUBROUTINE diag_inline_watflux_n
subroutine cls_wind(PZONA, PMERA, PHW, PCD, PCDN, PRI, PHV, PZON10M, PMER10M)
Definition: cls_wind.F90:6
subroutine diag_surf_budgetc_water(DGW, PTSTEP, PRN, PH, PLE, PLEI, PGFLUX, PSWD, PSWU, PLWD, PLWU, PFMU, PFMV, PEVAP, PSUBL)
subroutine param_cls(PTA, PTS, PQA, PPA, PRHOA, PZONA, PMERA, PH, PHW, PSFTH, PSFTQ, PSFZON, PSFMER, PT2M, PQ2M, PHU2M, PZON10M, PMER10M)
Definition: param_cls.F90:6
subroutine diag_surf_budget_water(PTT, PTS, PRHOA, PSFTH, PSFTQ, PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PEMIS, PTRAD, PSFZON, PSFMER, PRN, PH, PLE, PLEI, PGFLUX, PSWD, PSWU, PSWBD, PSWBU, PLWD, PLWU, PFMU, PFMV, PEVAP, PSUBL)
subroutine diag_inline_watflux_n(DGW, W, PTSTEP, PTA, PQA, PPA, PPS, PRHOA, PZONA, PMERA, PHT, PHW, PCD, PCDN, PCH, PRI, PHU, PZ0H, PQSAT, PSFTH, PSFTQ, PSFZON, PSFMER, PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PEMIS, PTRAD, PRAIN, PSNOW, PSFTH_ICE, PSFTQ_ICE)
subroutine diag_cpl_esm_water(W, OCPL_SEAICE, PTSTEP, PZON10M, PMER10M, PSFU, PSFV, PSWD, PSWU, PGFLUX, PSFTQ, PRAIN, PSNOW, PLW, PTICE, PSFTH_ICE, PSFTQ_ICE, PDIR_SW, PSCA_SW)
subroutine cls_tq(PTA, PQA, PPA, PPS, PHT, PCD, PCH, PRI, PTS, PHU, PZ0H, PH, PTNM, PQNM, PHUNM)
Definition: cls_tq.F90:6