SURFEX v8.1
General documentation of Surfex
diag_inline_flaken.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_flake_n (DGO, D, DC, F, &
7  PTSTEP, PTA, PQA, PPA, PPS, PRHOA, PZONA, &
8  PMERA, PHT, PHW, PRAIN, PSNOW, &
9  PCD, PCDN, PCH, PRI, PHU, &
10  PZ0H, PQSAT, PSFTH, PSFTQ, PSFZON, PSFMER, &
11  PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, &
12  PLE, PLEI, PSUBL, PLWUP, PALB, PSWE )
13 ! ###############################################################################
14 !
15 !!**** *DIAG_INLINE_FLAKE_n * - computes diagnostics during FLAKE 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 !! S. Riette 06/2009 CLS_2M becomes CLS_TQ, CLS_TQ and CLS_WIND have one
35 !! more argument (height of diagnostic)
36 !! P. Le Moigne 04/2013 : Accumulated diagnostics
37 !! Coupling for ESM
38 !!------------------------------------------------------------------
39 !
40 
41 !
42 !
43 !
45 USE modd_flake_n, ONLY : flake_t
46 !
47 USE modd_csts, ONLY : xtt
48 USE modd_surf_par, ONLY : xundef
49 USE modd_sfx_oasis, ONLY : lcpl_lake
50 !
51 USE modi_cls_tq
52 USE modi_cls_wind
53 USE modi_diag_surf_budget_flake
54 USE modi_diag_surf_budgetc
55 USE modi_diag_cpl_esm_flake
56 USE modi_abor1_sfx
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(IN) :: DGO
67 TYPE(diag_t), INTENT(INOUT) :: D
68 TYPE(diag_t), INTENT(INOUT) :: DC
69 TYPE(flake_t), INTENT(INOUT) :: F
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) :: PRAIN ! Rainfall (kg/m2/s)
82 REAL, DIMENSION(:), INTENT(IN) :: PSNOW ! Snowfall (kg/m2/s)
83 REAL, DIMENSION(:), INTENT(IN) :: PCD ! drag coefficient for momentum
84 REAL, DIMENSION(:), INTENT(IN) :: PCDN ! neutral drag coefficient
85 REAL, DIMENSION(:), INTENT(IN) :: PCH ! drag coefficient for heat
86 REAL, DIMENSION(:), INTENT(IN) :: PRI ! Richardson number
87 REAL, DIMENSION(:), INTENT(IN) :: PHU ! near-surface humidity
88 REAL, DIMENSION(:), INTENT(IN) :: PZ0H ! roughness length for heat
89 REAL, DIMENSION(:), INTENT(IN) :: PQSAT ! humidity at saturation
90 REAL, DIMENSION(:), INTENT(IN) :: PSFZON ! zonal friction
91 REAL, DIMENSION(:), INTENT(IN) :: PSFMER ! meridian friction
92 REAL, DIMENSION(:), INTENT(IN) :: PSFTH ! heat flux (W/m2)
93 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ ! water flux (kg/m2/s)
94 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_SW ! direct solar radiation (on horizontal surf.)
95 ! ! (W/m2)
96 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
97 ! ! (W/m2)
98 REAL, DIMENSION(:), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.) (W/m2)
99 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_ALB ! direct albedo for each spectral band (-)
100 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_ALB ! diffuse albedo for each spectral band (-)
101 REAL, DIMENSION(:), INTENT(IN) :: PLE ! total latent heat flux (W/m2)
102 REAL, DIMENSION(:), INTENT(IN) :: PLEI ! sublimation heat flux (W/m2)
103 REAL, DIMENSION(:), INTENT(IN) :: PSUBL ! sublimation (kg/m2/s)
104 REAL, DIMENSION(:), INTENT(IN) :: PLWUP ! upward longwave radiation (W/m2)
105 !
106 REAL, DIMENSION(:), INTENT(IN) :: PALB ! Flake total albedo
107 REAL, DIMENSION(:), INTENT(IN) :: PSWE ! Flake snow water equivalent (kg.m-2)
108 !
109 !* 0.2 declarations of local variables
110 !
111 REAL, DIMENSION(SIZE(PTA)) :: ZH
112 REAL(KIND=JPRB) :: ZHOOK_HANDLE
113 !-------------------------------------------------------------------------------------
114 !
115 IF (lhook) CALL dr_hook('DIAG_INLINE_FLAKE_N',0,zhook_handle)
116 !
117 d%XTS(:) = f%XTS(:)
118 !
119 IF (.NOT. f%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  f%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  !
147  IF (dgo%N2M>=1) THEN
148  d%XT2M = xundef
149  d%XQ2M = xundef
150  d%XHU2M = xundef
151  d%XZON10M = xundef
152  d%XMER10M = xundef
153  d%XRI = pri
154  ENDIF
155 ENDIF
156 !
157 IF (dgo%LSURF_BUDGET.OR.dgo%LSURF_BUDGETC) THEN
158  !
159  d%XLE (:) = ple(:)
160  d%XLEI (:) = plei(:)
161  d%XEVAP(:) = psftq(:)
162  d%XSUBL(:) = psubl(:)
163  d%XALBT(:) = palb(:)
164  d%XSWE (:) = pswe(:)
165  !
166  CALL diag_surf_budget_flake (d, prhoa, psfth, pdir_sw, psca_sw, plw, &
167  pdir_alb, psca_alb, plwup, psfzon, psfmer )
168  !
169 END IF
170 !
171 IF(dgo%LSURF_BUDGETC)THEN
172  CALL diag_surf_budgetc(d, dc, ptstep, .true.)
173 ENDIF
174 !
175 IF (dgo%LCOEF) THEN
176  !
177  !* Transfer coefficients
178  !
179  d%XCD = pcd
180  d%XCH = pch
181  d%XCE = pch
182  !
183  !* Roughness lengths
184  !
185  d%XZ0 = f%XZ0
186  d%XZ0H = pz0h
187  !
188 END IF
189 !
190 IF (dgo%LSURF_VARS) THEN
191  !
192  !* Humidity at saturation
193  !
194  d%XQS = pqsat
195  !
196 END IF
197 !
198 ! Diag for Earth System Model coupling
199 !
200 IF (lcpl_lake) THEN
201 !
202  CALL diag_cpl_esm_flake(f,ptstep,prain,psnow,psftq)
203 !
204 ENDIF
205 !
206 IF (lhook) CALL dr_hook('DIAG_INLINE_FLAKE_N',1,zhook_handle)
207 !-------------------------------------------------------------------------------------
208 !
209 END SUBROUTINE diag_inline_flake_n
subroutine cls_wind(PZONA, PMERA, PHW, PCD, PCDN, PRI, PHV, PZON10M, PMER10M)
Definition: cls_wind.F90:7
subroutine diag_inline_flake_n(DGO, D, DC, F, PTSTEP, PTA, PQA, PPA, PPS, PRHOA, PZONA, PMERA, PHT, PHW, PRAIN, PSNOW, PCD, PCDN, PCH, PRI, PHU, PZ0H, PQSAT, PSFTH, PSFTQ, PSFZON, PSFMER, PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PLE, PLEI, PSUBL, PLWUP, PALB, PSWE)
real, parameter xundef
subroutine diag_cpl_esm_flake(F, PTSTEP, PRAIN, PSNOW, PSFTQ)
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 diag_surf_budget_flake(D, PRHOA, PSFTH, PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PLWUP, PSFZON, PSFMER)
subroutine cls_tq(PTA, PQA, PPA, PPS, PHT, PCD, PCH, PRI, PTS, PHU, PZ0H, PH, PTNM, PQNM, PHUNM)
Definition: cls_tq.F90:8