SURFEX v8.1
General documentation of Surfex
diag_inline_isban.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_isba_n (DGO, KK, DK, OCANOPY, PTA, PQA, PPA, PPS, PRHOA, PZONA, PMERA, &
7  PHT, PHW, PSFTH, PSFTQ, PSFZON, PSFMER, PDIR_SW, PSCA_SW, PLW )
8 ! ###############################################################################
9 !
10 !!**** *DIAG_INLINE_ISBA_n * - computes diagnostics during ISBA time-step
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 08/2009 caculate cumulated diag LSURF_BUDGETC
30 !! S. Riette 06/2009 CLS_2M becomes CLS_TQ, CLS_TQ and CLS_WIND have one
31 !! more argument (height of diagnostic)
32 !!------------------------------------------------------------------
33 !
34 !
35 !
36 !
38 USE modd_isba_n, ONLY : isba_k_t
39 !
40 USE modd_surf_par, ONLY : xundef
41 !
42 USE modi_cls_tq
43 USE modi_cls_wind
44 USE modi_diag_surf_budget_isba
45 !
46 USE yomhook ,ONLY : lhook, dr_hook
47 USE parkind1 ,ONLY : jprb
48 !
49 IMPLICIT NONE
50 !
51 !* 0.1 declarations of arguments
52 !
53 !
54 TYPE(diag_options_t), INTENT(IN) :: DGO
55 TYPE(isba_k_t), INTENT(INOUT) :: KK
56 TYPE(diag_t), INTENT(INOUT) :: DK
57 !
58 LOGICAL, INTENT(IN) :: OCANOPY
59 !
60 REAL, DIMENSION(:), INTENT(IN) :: PTA ! atmospheric temperature
61 REAL, DIMENSION(:), INTENT(IN) :: PQA ! atmospheric specific humidity
62 REAL, DIMENSION(:), INTENT(IN) :: PPA ! atmospheric level pressure
63 REAL, DIMENSION(:), INTENT(IN) :: PPS ! surface pressure
64 REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density
65 REAL, DIMENSION(:), INTENT(IN) :: PZONA ! zonal wind
66 REAL, DIMENSION(:), INTENT(IN) :: PMERA ! meridian wind
67 REAL, DIMENSION(:), INTENT(IN) :: PHT ! atmospheric level height
68 REAL, DIMENSION(:), INTENT(IN) :: PHW ! atmospheric level height for wind
69 REAL, DIMENSION(:,:), INTENT(IN) :: PDIR_SW ! direct solar radiation (on horizontal surf.)
70 REAL, DIMENSION(:,:), INTENT(IN) :: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
71 REAL, DIMENSION(:), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.)
72 !
73 REAL, DIMENSION(:), INTENT(IN) :: PSFZON ! zonal friction
74 REAL, DIMENSION(:), INTENT(IN) :: PSFMER ! meridian friction
75 REAL, DIMENSION(:), INTENT(IN) :: PSFTH ! heat flux (W/m2)
76 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ ! water flux (kg/m2/s)
77 !
78 !* 0.2 declarations of local variables
79 !
80 REAL, DIMENSION(SIZE(PTA)) :: ZH
81 REAL(KIND=JPRB) :: ZHOOK_HANDLE
82 !-------------------------------------------------------------------------------------
83 !
84 IF (lhook) CALL dr_hook('DIAG_INLINE_ISBA_N',0,zhook_handle)
85 !
86 ! * Near surface atmospheric variables
87 !
88 IF (.NOT. ocanopy) THEN
89  !
90  IF (dgo%N2M==2) THEN
91  zh(:)=2.
92  CALL cls_tq(pta, pqa, ppa, pps, pht, dk%XCD, dk%XCH, dk%XRI, &
93  dk%XTS, dk%XHU, dk%XZ0H, zh, dk%XT2M, dk%XQ2M, dk%XHU2M )
94  zh(:)=10.
95  CALL cls_wind(pzona, pmera, phw, dk%XCD, dk%XCDN, dk%XRI, zh, &
96  dk%XZON10M, dk%XMER10M )
97  END IF
98  !
99  IF (dgo%N2M>=1) dk%XWIND10M(:) = sqrt(dk%XZON10M(:)**2 + dk%XMER10M(:)**2)
100  !
101 ELSE
102  !
103  IF (dgo%N2M>=1) THEN
104  dk%XT2M = xundef
105  dk%XQ2M = xundef
106  dk%XHU2M = xundef
107  dk%XZON10M = xundef
108  dk%XMER10M = xundef
109  dk%XWIND10M= xundef
110  ENDIF
111  !
112 ENDIF
113 !
114 ! * Surface energy budget
115 !
116 IF (dgo%LSURF_BUDGET.OR.dgo%LSURF_BUDGETC) THEN
117  !
118  CALL diag_surf_budget_isba(pdir_sw, psca_sw, plw, kk, dk)
119  !
120  dk%XFMU = psfzon
121  dk%XFMV = psfmer
122  !
123 END IF
124 !
125 IF (dgo%LCOEF) THEN
126  !
127  !* Transfer coefficient
128  !
129  dk%XCD = dk%XCD
130  dk%XCH = dk%XCH
131  dk%XCE = dk%XCH
132  !
133  !* Roughness lengths
134  !
135  dk%XZ0 = dk%XZ0
136  dk%XZ0H = dk%XZ0H
137  dk%XZ0EFF = dk%XZ0EFF
138  !
139 ENDIF
140 !
141 IF (dgo%LSURF_VARS) THEN
142  !
143  !* Humidity at surface
144  !
145  dk%XQS = dk%XQS
146  !
147 ENDIF
148 IF (lhook) CALL dr_hook('DIAG_INLINE_ISBA_N',1,zhook_handle)
149 !
150 !-------------------------------------------------------------------------------------
151 !
152 END SUBROUTINE diag_inline_isba_n
subroutine cls_wind(PZONA, PMERA, PHW, PCD, PCDN, PRI, PHV, PZON10M, PMER10M)
Definition: cls_wind.F90:7
subroutine diag_surf_budget_isba(PDIR_SW, PSCA_SW, PLW, K, DK)
real, parameter xundef
subroutine diag_inline_isba_n(DGO, KK, DK, OCANOPY, PTA, PQA, PPA, PPS, PRHOA, PZONA, PMERA, PHT, PHW, PSFTH, PSFTQ, PSFZON, PSFMER, PDIR_SW, PSCA_SW, PLW)
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine cls_tq(PTA, PQA, PPA, PPS, PHT, PCD, PCH, PRI, PTS, PHU, PZ0H, PH, PTNM, PQNM, PHUNM)
Definition: cls_tq.F90:8