SURFEX v8.1
General documentation of Surfex
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 (DGO, D, DC, 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
50 !
51 USE modi_cls_tq
52 USE modi_cls_wind
53 USE modi_diag_surf_budget_water
54 USE modi_diag_surf_budgetc
55 USE modi_diag_cpl_esm_water
56 !
57 !
58 USE yomhook ,ONLY : lhook, dr_hook
59 USE parkind1 ,ONLY : jprb
60 !
61 IMPLICIT NONE
62 !
63 !* 0.1 declarations of arguments
64 !
65 !
66 TYPE(diag_options_t), INTENT(INOUT) :: DGO
67 TYPE(diag_t), INTENT(INOUT) :: D
68 TYPE(diag_t), INTENT(INOUT) :: DC
69 TYPE(watflux_t), INTENT(INOUT) :: W
70 !
71 REAL, INTENT(IN) :: PTSTEP ! atmospheric time-step (s)
72 REAL, DIMENSION(:), INTENT(IN) :: PTA ! atmospheric temperature
73 REAL, DIMENSION(:), INTENT(IN) :: PQA ! atmospheric specific humidity
74 REAL, DIMENSION(:), INTENT(IN) :: PPA ! atmospheric level pressure
75 REAL, DIMENSION(:), INTENT(IN) :: PPS ! surface pressure
76 REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density
77 REAL, DIMENSION(:), INTENT(IN) :: PZONA ! zonal wind
78 REAL, DIMENSION(:), INTENT(IN) :: PMERA ! meridian wind
79 REAL, DIMENSION(:), INTENT(IN) :: PHT ! atmospheric level height
80 REAL, DIMENSION(:), INTENT(IN) :: PHW ! atmospheric level height for wind
81 REAL, DIMENSION(:), INTENT(IN) :: PCD ! drag coefficient for momentum
82 REAL, DIMENSION(:), INTENT(IN) :: PCDN ! neutral drag coefficient
83 REAL, DIMENSION(:), INTENT(IN) :: PCH ! drag coefficient for heat
84 REAL, DIMENSION(:), INTENT(IN) :: PRI ! Richardson number
85 REAL, DIMENSION(:), INTENT(IN) :: PHU ! near-surface humidity
86 REAL, DIMENSION(:), INTENT(IN) :: PZ0H ! roughness length for heat
87 REAL, DIMENSION(:), INTENT(IN) :: PQSAT ! humidity at saturation
88 REAL, DIMENSION(:), INTENT(IN) :: PSFZON ! zonal friction
89 REAL, DIMENSION(:), INTENT(IN) :: PSFMER ! meridian friction
90 REAL, DIMENSION(:), INTENT(IN) :: PSFTH ! heat flux (W/m2)
91 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ ! water flux (kg/m2/s)
92 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_SW ! direct solar radiation (on horizontal surf.)
93 ! ! (W/m2)
94 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
95 ! ! (W/m2)
96 REAL, DIMENSION(:), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.)
97 REAL, DIMENSION(:), INTENT(IN) :: PTRAD ! radiative temperature (K)
98 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_ALB ! direct albedo for each spectral band (-)
99 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_ALB ! diffuse albedo for each spectral band (-)
100 REAL, DIMENSION(:), INTENT(IN) :: PEMIS ! emissivity (-)
101 !
102 REAL, DIMENSION(:), INTENT(IN) :: PRAIN ! Rainfall (kg/m2/s)
103 REAL, DIMENSION(:), INTENT(IN) :: PSNOW ! Snowfall (kg/m2/s)
104 REAL, DIMENSION(:), INTENT(IN) :: PSFTH_ICE ! heat flux (W/m2)
105 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ_ICE ! water flux (kg/m2/s)
106 !
107 !* 0.2 declarations of local variables
108 !
109 REAL, DIMENSION(SIZE(PTA)) :: ZH
110 REAL(KIND=JPRB) :: ZHOOK_HANDLE
111 !-------------------------------------------------------------------------------------
112 !
113 IF (lhook) CALL dr_hook('DIAG_INLINE_WATFLUX_N',0,zhook_handle)
114 !
115 ! * Mean surface temperature need to couple with AGCM
116 !
117 d%XTS(:) = w%XTS(:)
118 !
119 IF (.NOT. w%LSBL) THEN
120 !
121  IF (dgo%N2M==2) THEN
122  zh(:)=2.
123  CALL cls_tq(pta, pqa, ppa, pps, pht, pcd, pch, pri, &
124  w%XTS, phu, pz0h, zh, d%XT2M, d%XQ2M, d%XHU2M )
125  zh(:)=10.
126  CALL cls_wind(pzona, pmera, phw, pcd, pcdn, pri, zh, d%XZON10M, d%XMER10M )
127  END IF
128 !
129  IF (dgo%N2M>=1) THEN
130  !
131  d%XT2M_MIN(:) = min(d%XT2M_MIN(:),d%XT2M(:))
132  d%XT2M_MAX(:) = max(d%XT2M_MAX(:),d%XT2M(:))
133  !
134  d%XHU2M_MIN(:) = min(d%XHU2M_MIN(:),d%XHU2M(:))
135  d%XHU2M_MAX(:) = max(d%XHU2M_MAX(:),d%XHU2M(:))
136  !
137  d%XWIND10M (:) = sqrt(d%XZON10M(:)**2+d%XMER10M(:)**2)
138  d%XWIND10M_MAX(:) = max(d%XWIND10M_MAX(:),d%XWIND10M(:))
139  !
140  !* Richardson number
141  d%XRI = pri
142  !
143  ENDIF
144 !
145 ELSE
146  IF (dgo%N2M>=1) THEN
147  d%XT2M = xundef
148  d%XQ2M = xundef
149  d%XHU2M = xundef
150  d%XZON10M = xundef
151  d%XMER10M = xundef
152  d%XRI = pri
153  ENDIF
154 ENDIF
155 !
156 IF (dgo%LSURF_BUDGET.OR.dgo%LSURF_BUDGETC) THEN
157  !
158  CALL diag_surf_budget_water (d, xtt, w%XTS, prhoa, psfth, psftq, pdir_sw, psca_sw, plw, &
159  pdir_alb, psca_alb, pemis, ptrad, psfzon, psfmer )
160  !
161 END IF
162 !
163 IF(dgo%LSURF_BUDGETC) CALL diag_surf_budgetc(d, dc, ptstep, .true.)
164 !
165 IF (dgo%LCOEF) THEN
166  !
167  !* Transfer coefficients
168  !
169  d%XCD = pcd
170  d%XCH = pch
171  d%XCE = pch
172  !
173  !* Roughness lengths
174  !
175  d%XZ0 = w%XZ0
176  d%XZ0H = pz0h
177  !
178 ENDIF
179 !
180 IF (dgo%LSURF_VARS) THEN
181  !
182  !* Humidity at saturation
183  !
184  d%XQS = pqsat
185  !
186 ENDIF
187 !
188 ! Diag for Earth System Model coupling
189 !
190 IF (lcpl_sea) THEN
191 !
192  CALL diag_cpl_esm_water(w, d, lcpl_seaice, ptstep, psftq, prain, psnow, plw, &
193  psfth_ice, psftq_ice, pdir_sw, psca_sw )
194 !
195 ENDIF
196 IF (lhook) CALL dr_hook('DIAG_INLINE_WATFLUX_N',1,zhook_handle)
197 !
198 !-------------------------------------------------------------------------------------
199 !
200 END SUBROUTINE diag_inline_watflux_n
subroutine diag_inline_watflux_n(DGO, D, DC, 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 cls_wind(PZONA, PMERA, PHW, PCD, PCDN, PRI, PHV, PZON10M, PMER10M)
Definition: cls_wind.F90:7
subroutine diag_surf_budget_water(D, PTT, PTS, PRHOA, PSFTH, PSFTQ, PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PEMIS, PTRAD, PSFZON, PSFMER)
subroutine diag_cpl_esm_water(W, D, OCPL_SEAICE, PTSTEP, PSFTQ, PRAIN, PSNOW, PLW, PSFTH_ICE, PSFTQ_ICE, PDIR_SW, PSCA_SW)
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine diag_surf_budgetc(D, DC, PTSTEP, ONOTICE)
real, save xtt
Definition: modd_csts.F90:66
subroutine cls_tq(PTA, PQA, PPA, PPS, PHT, PCD, PCH, PRI, PTS, PHU, PZ0H, PH, PTNM, PQNM, PHUNM)
Definition: cls_tq.F90:8