SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
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 (DGF, 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_param_cls
52 USE modi_cls_tq
53 USE modi_cls_wind
54 USE modi_diag_surf_budget_flake
55 USE modi_diag_surf_budgetc_flake
56 USE modi_diag_cpl_esm_flake
57 USE modi_abor1_sfx
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_flake_t), INTENT(INOUT) :: dgf
68 TYPE(flake_t), INTENT(INOUT) :: f
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) :: prain ! Rainfall (kg/m2/s)
81 REAL, DIMENSION(:), INTENT(IN) :: psnow ! Snowfall (kg/m2/s)
82 REAL, DIMENSION(:), INTENT(IN) :: pcd ! drag coefficient for momentum
83 REAL, DIMENSION(:), INTENT(IN) :: pcdn ! neutral drag coefficient
84 REAL, DIMENSION(:), INTENT(IN) :: pch ! drag coefficient for heat
85 REAL, DIMENSION(:), INTENT(IN) :: pri ! Richardson number
86 REAL, DIMENSION(:), INTENT(IN) :: phu ! near-surface humidity
87 REAL, DIMENSION(:), INTENT(IN) :: pz0h ! roughness length for heat
88 REAL, DIMENSION(:), INTENT(IN) :: pqsat ! humidity at saturation
89 REAL, DIMENSION(:), INTENT(IN) :: psfzon ! zonal friction
90 REAL, DIMENSION(:), INTENT(IN) :: psfmer ! meridian friction
91 REAL, DIMENSION(:), INTENT(IN) :: psfth ! heat flux (W/m2)
92 REAL, DIMENSION(:), INTENT(IN) :: psftq ! water flux (kg/m2/s)
93 REAL, DIMENSION(:,:),INTENT(IN):: pdir_sw ! direct solar radiation (on horizontal surf.)
94 ! ! (W/m2)
95 REAL, DIMENSION(:,:),INTENT(IN):: psca_sw ! diffuse solar radiation (on horizontal surf.)
96 ! ! (W/m2)
97 REAL, DIMENSION(:), INTENT(IN) :: plw ! longwave radiation (on horizontal surf.) (W/m2)
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) :: ple ! total latent heat flux (W/m2)
101 REAL, DIMENSION(:), INTENT(IN) :: plei ! sublimation heat flux (W/m2)
102 REAL, DIMENSION(:), INTENT(IN) :: psubl ! sublimation (kg/m2/s)
103 REAL, DIMENSION(:), INTENT(IN) :: plwup ! upward longwave radiation (W/m2)
104 !
105 REAL, DIMENSION(:), INTENT(IN) :: palb ! Flake total albedo
106 REAL, DIMENSION(:), INTENT(IN) :: pswe ! Flake snow water equivalent (kg.m-2)
107 !
108 !* 0.2 declarations of local variables
109 !
110 REAL, DIMENSION(SIZE(PTA)) :: zh
111 REAL(KIND=JPRB) :: zhook_handle
112 !-------------------------------------------------------------------------------------
113 !
114 IF (lhook) CALL dr_hook('DIAG_INLINE_FLAKE_N',0,zhook_handle)
115 !
116 dgf%XDIAG_TS(:) = f%XTS(:)
117 !
118 IF (.NOT. f%LSBL) THEN
119 !
120  IF (dgf%N2M==1) THEN
121  CALL param_cls(pta, f%XTS, pqa, ppa, prhoa, pzona, pmera, pht, phw, &
122  psfth, psftq, psfzon, psfmer, &
123  dgf%XT2M, dgf%XQ2M, dgf%XHU2M, dgf%XZON10M, dgf%XMER10M )
124  ELSE IF (dgf%N2M==2) THEN
125  zh(:)=2.
126  CALL cls_tq(pta, pqa, ppa, pps, pht, &
127  pcd, pch, pri, &
128  f%XTS, phu, pz0h, zh, &
129  dgf%XT2M, dgf%XQ2M, dgf%XHU2M )
130  zh(:)=10.
131  CALL cls_wind(pzona, pmera, phw, &
132  pcd, pcdn, pri, zh, &
133  dgf%XZON10M, dgf%XMER10M )
134  END IF
135 !
136  IF (dgf%N2M>=1) THEN
137  !
138  dgf%XT2M_MIN(:) = min(dgf%XT2M_MIN(:),dgf%XT2M(:))
139  dgf%XT2M_MAX(:) = max(dgf%XT2M_MAX(:),dgf%XT2M(:))
140  !
141  dgf%XHU2M_MIN(:) = min(dgf%XHU2M_MIN(:),dgf%XHU2M(:))
142  dgf%XHU2M_MAX(:) = max(dgf%XHU2M_MAX(:),dgf%XHU2M(:))
143  !
144  dgf%XWIND10M(:) = sqrt(dgf%XZON10M(:)**2+dgf%XMER10M(:)**2)
145  dgf%XWIND10M_MAX(:) = max(dgf%XWIND10M_MAX(:),dgf%XWIND10M(:))
146  !
147  !* Richardson number
148  dgf%XRI = pri
149  !
150  ENDIF
151 !
152 ELSE
153  !
154  IF (dgf%N2M>=1) THEN
155  dgf%XT2M = xundef
156  dgf%XQ2M = xundef
157  dgf%XHU2M = xundef
158  dgf%XZON10M = xundef
159  dgf%XMER10M = xundef
160  dgf%XRI = pri
161  ENDIF
162 ENDIF
163 !
164 IF (dgf%LSURF_BUDGET.OR.dgf%LSURF_BUDGETC) THEN
165  !
166  dgf%XLE (:) = ple(:)
167  dgf%XLEI (:) = plei(:)
168  dgf%XEVAP(:) = psftq(:)
169  dgf%XSUBL(:) = psubl(:)
170  dgf%XALBT(:) = palb(:)
171  dgf%XSWE (:) = pswe(:)
172  !
173  CALL diag_surf_budget_flake( prhoa, psfth, &
174  pdir_sw, psca_sw, plw, &
175  pdir_alb, psca_alb, plwup, &
176  psfzon, psfmer, dgf%XLE, dgf%XRN, dgf%XH, dgf%XGFLUX, &
177  dgf%XSWD, dgf%XSWU, dgf%XSWBD, dgf%XSWBU, dgf%XLWD, dgf%XLWU, &
178  dgf%XFMU, dgf%XFMV )
179  !
180 END IF
181 !
182 IF(dgf%LSURF_BUDGETC)THEN
183  CALL diag_surf_budgetc_flake(dgf, &
184  ptstep, dgf%XRN, dgf%XH, dgf%XLE, dgf%XLEI, dgf%XGFLUX, &
185  dgf%XSWD, dgf%XSWU, dgf%XLWD, dgf%XLWU, dgf%XFMU, dgf%XFMV,&
186  dgf%XEVAP, dgf%XSUBL )
187 ENDIF
188 !
189 IF (dgf%LCOEF) THEN
190  !
191  !* Transfer coefficients
192  !
193  dgf%XCD = pcd
194  dgf%XCH = pch
195  dgf%XCE = pch
196  !
197  !* Roughness lengths
198  !
199  dgf%XZ0 = f%XZ0
200  dgf%XZ0H = pz0h
201  !
202 END IF
203 !
204 IF (dgf%LSURF_VARS) THEN
205  !
206  !* Humidity at saturation
207  !
208  dgf%XQS = pqsat
209  !
210 END IF
211 !
212 ! Diag for Earth System Model coupling
213 !
214 IF (lcpl_lake) THEN
215 !
216  CALL diag_cpl_esm_flake(f, &
217  ptstep,prain,psnow,psftq)
218 !
219 ENDIF
220 !
221 IF (lhook) CALL dr_hook('DIAG_INLINE_FLAKE_N',1,zhook_handle)
222 !-------------------------------------------------------------------------------------
223 !
224 END SUBROUTINE diag_inline_flake_n
subroutine diag_inline_flake_n(DGF, 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)
subroutine cls_wind(PZONA, PMERA, PHW, PCD, PCDN, PRI, PHV, PZON10M, PMER10M)
Definition: cls_wind.F90:6
subroutine diag_surf_budgetc_flake(DGF, 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_cpl_esm_flake(F, PTSTEP, PRAIN, PSNOW, PSFTQ)
subroutine diag_surf_budget_flake(PRHOA, PSFTH, PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PLWUP, PSFZON, PSFMER, PLE, PRN, PH, PGFLUX, PSWD, PSWU, PSWBD, PSWBU, PLWD, PLWU, PFMU, PFMV)
subroutine cls_tq(PTA, PQA, PPA, PPS, PHT, PCD, PCH, PRI, PTS, PHU, PZ0H, PH, PTNM, PQNM, PHUNM)
Definition: cls_tq.F90:6