SURFEX v8.1
General documentation of Surfex
reproj_diag_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 reproj_diag_isba_n (DK, DEK, DMK, PEK, OSURF_BUDGET, OSURF_EVAP_BUDGET, &
7  OWATER_BUDGET, OSURF_MISC_BUDGET, OPROSNOW, &
8  OMEB_PATCH, PSLOPECOS )
9 ! ###############################################################################
10 !
11 !!**** *REPROJ_DIAG-ISBA_n * - additional diagnostics for ISBA
12 !!
13 !! PURPOSE
14 !! -------
15 !
16 !!** METHOD
17 !! ------
18 !!
19 !! REFERENCE
20 !! ---------
21 !!
22 !!
23 !! AUTHOR
24 !! ------
25 !! S. Faroux
26 !!
27 !!------------------------------------------------------------------
28 !
29 USE modd_diag_n, ONLY : diag_t
32 USE modd_isba_n, ONLY : isba_pe_t
33 USE modd_surf_par, ONLY : xundef
34 !
35 USE yomhook ,ONLY : lhook, dr_hook
36 USE parkind1 ,ONLY : jprb
37 !
38 IMPLICIT NONE
39 !
40 !* 0.1 declarations of arguments
41 !
42 TYPE(diag_t), INTENT(INOUT) :: DK
43 TYPE(diag_evap_isba_t), INTENT(INOUT) :: DEK
44 TYPE(diag_misc_isba_t), INTENT(INOUT) :: DMK
45 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
46 !
47 LOGICAL, INTENT(IN) :: OSURF_BUDGET
48 LOGICAL, INTENT(IN) :: OSURF_EVAP_BUDGET
49 LOGICAL, INTENT(IN) :: OWATER_BUDGET
50 LOGICAL, INTENT(IN) :: OSURF_MISC_BUDGET
51 LOGICAL, INTENT(IN) :: OPROSNOW
52 !
53 LOGICAL, INTENT(IN) :: OMEB_PATCH
54 !
55 REAL, DIMENSION(:), INTENT(IN) :: PSLOPECOS ! cosine of the slope for Crocus
56 !
57 !* 0.2 declarations of local variables
58 !
59 REAL, DIMENSION(SIZE(PEK%XPSN)) :: ZCORR_SLOPE
60 REAL, DIMENSION(SIZE(PEK%TSNOW%WSNOW,1),SIZE(PEK%TSNOW%WSNOW,2)) :: ZCORR_SLOPE_2D
61 !
62 INTEGER :: JL, JSW
63 REAL(KIND=JPRB) :: ZHOOK_HANDLE
64 !
65 !-------------------------------------------------------------------------------------
66 !
67 IF (lhook) CALL dr_hook('REPROJ_DIAG_ISBA_N',0,zhook_handle)
68 !
69 IF ( oprosnow ) THEN
70  !
71  !this variable is used further to project diagnostics on the verticale
72  zcorr_slope(:) = 1. / pslopecos(:)
73  DO jl = 1,SIZE(pek%TSNOW%WSNOW,2)
74  WHERE (pek%TSNOW%WSNOW(:,jl)>0.)
75  zcorr_slope_2d(:,jl) = zcorr_slope(:)
76  ELSEWHERE
77  zcorr_slope_2d(:,jl) = 1.
78  ENDWHERE
79  ENDDO
80  !
81  IF ( osurf_budget ) THEN
82  !
83  dk%XRN (:) = dk%XRN (:) * zcorr_slope(:)
84  dk%XH (:) = dk%XH (:) * zcorr_slope(:)
85  dk%XGFLUX (:) = dk%XGFLUX (:) * zcorr_slope(:)
86  dk%XLEI (:) = dk%XLEI (:) * zcorr_slope(:)
87  dk%XSWD (:) = dk%XSWD (:) * zcorr_slope(:)
88  dk%XSWU (:) = dk%XSWU (:) * zcorr_slope(:)
89  dk%XLWD (:) = dk%XLWD (:) * zcorr_slope(:)
90  dk%XLWU (:) = dk%XLWU (:) * zcorr_slope(:)
91  dk%XFMU (:) = dk%XFMU (:) * zcorr_slope(:)
92  dk%XFMV (:) = dk%XFMV (:) * zcorr_slope(:)
93  !
94  DO jsw=1,SIZE(dk%XSWBD,2)
95  dk%XSWBD (:, jsw) = dk%XSWBD (:,jsw) * zcorr_slope(:)
96  dk%XSWBU (:, jsw) = dk%XSWBU (:,jsw) * zcorr_slope(:)
97  ENDDO
98  !
99  END IF
100  !
101  IF ( osurf_evap_budget ) THEN
102  !
103  dk%XEVAP (:) = dk%XEVAP (:) * zcorr_slope(:)
104  dk%XSUBL (:) = dk%XSUBL (:) * zcorr_slope(:)
105  !
106  dek%XLEG (:) = dek%XLEG (:) * zcorr_slope(:)
107  dek%XLEGI (:) = dek%XLEGI (:) * zcorr_slope(:)
108  dek%XLEV (:) = dek%XLEV (:) * zcorr_slope(:)
109  dek%XLES (:) = dek%XLES (:) * zcorr_slope(:)
110  dek%XLER (:) = dek%XLER (:) * zcorr_slope(:)
111  dek%XLETR (:) = dek%XLETR (:) * zcorr_slope(:)
112  dek%XDRAIN (:) = dek%XDRAIN (:) * zcorr_slope(:)
113  dek%XQSB (:) = dek%XQSB (:) * zcorr_slope(:)
114  dek%XRUNOFF (:) = dek%XRUNOFF (:) * zcorr_slope(:)
115  dek%XHORT (:) = dek%XHORT (:) * zcorr_slope(:)
116  dek%XDRIP (:) = dek%XDRIP (:) * zcorr_slope(:)
117  dek%XRRVEG (:) = dek%XRRVEG (:) * zcorr_slope(:)
118  dek%XMELT (:) = dek%XMELT (:) * zcorr_slope(:)
119  dek%XIFLOOD (:) = dek%XIFLOOD (:) * zcorr_slope(:)
120  dek%XPFLOOD (:) = dek%XPFLOOD (:) * zcorr_slope(:)
121  dek%XLE_FLOOD (:) = dek%XLE_FLOOD (:) * zcorr_slope(:)
122  dek%XLEI_FLOOD (:) = dek%XLEI_FLOOD (:) * zcorr_slope(:)
123  dek%XIRRIG_FLUX(:) = dek%XIRRIG_FLUX (:) * zcorr_slope(:)
124  !
125  IF ( omeb_patch ) THEN
126  !
127  dek%XLEV_CV (:) = dek%XLEV_CV (:) * zcorr_slope(:)
128  dek%XLES_CV (:) = dek%XLES_CV (:) * zcorr_slope(:)
129  dek%XLETR_CV (:) = dek%XLETR_CV (:) * zcorr_slope(:)
130  dek%XLELITTER (:) = dek%XLELITTER (:) * zcorr_slope(:)
131  dek%XLELITTERI(:) = dek%XLELITTERI(:) * zcorr_slope(:)
132  dek%XDRIPLIT (:) = dek%XDRIPLIT (:) * zcorr_slope(:)
133  dek%XRRLIT (:) = dek%XRRLIT (:) * zcorr_slope(:)
134  dek%XLER_CV (:) = dek%XLER_CV (:) * zcorr_slope(:)
135  dek%XLE_CA (:) = dek%XLE_CA (:) * zcorr_slope(:)
136  dek%XLE_CV (:) = dek%XLE_CV (:) * zcorr_slope(:)
137  dek%XLE_GV (:) = dek%XLE_GV (:) * zcorr_slope(:)
138  dek%XLE_GN (:) = dek%XLE_GN (:) * zcorr_slope(:)
139  !
140  dek%XSWNET_V (:) = dek%XSWNET_V (:) * zcorr_slope(:)
141  dek%XSWNET_G (:) = dek%XSWNET_G (:) * zcorr_slope(:)
142  dek%XSWNET_N (:) = dek%XSWNET_N (:) * zcorr_slope(:)
143  dek%XSWNET_NS (:) = dek%XSWNET_NS (:) * zcorr_slope(:)
144  dek%XLWNET_V (:) = dek%XLWNET_V (:) * zcorr_slope(:)
145  dek%XLWNET_G (:) = dek%XLWNET_G (:) * zcorr_slope(:)
146  dek%XLWNET_N (:) = dek%XLWNET_N (:) * zcorr_slope(:)
147  dek%XSWDOWN_GN(:) = dek%XSWDOWN_GN(:) * zcorr_slope(:)
148  dek%XLWDOWN_GN(:) = dek%XLWDOWN_GN(:) * zcorr_slope(:)
149  dek%XH_CV (:) = dek%XH_CV (:) * zcorr_slope(:)
150  dek%XH_GV (:) = dek%XH_GV (:) * zcorr_slope(:)
151  dek%XH_CA (:) = dek%XH_CA (:) * zcorr_slope(:)
152  dek%XH_GN (:) = dek%XH_GN (:) * zcorr_slope(:)
153  dek%XSR_GN (:) = dek%XSR_GN (:) * zcorr_slope(:)
154  dek%XMELT_CV (:) = dek%XMELT_CV (:) * zcorr_slope(:)
155  dek%XFRZ_CV (:) = dek%XFRZ_CV (:) * zcorr_slope(:)
156  !
157  ENDIF
158  !
159  IF ( pek%TSNOW%SCHEME=='3-L' .OR. pek%TSNOW%SCHEME=='CRO') THEN
160  !
161  dek%XLESL (:) = dek%XLESL (:) * zcorr_slope(:)
162  dek%XSNDRIFT (:) = dek%XSNDRIFT (:) * zcorr_slope(:)
163  !
164  END IF
165  !
166  IF ( owater_budget )THEN
167  !
168  dek%XDWG (:) = dek%XDWG (:) * zcorr_slope(:)
169  dek%XDWGI (:) = dek%XDWGI (:) * zcorr_slope(:)
170  dek%XDWR (:) = dek%XDWR (:) * zcorr_slope(:)
171  dek%XDSWE (:) = dek%XDSWE (:) * zcorr_slope(:)
172  dek%XWATBUD(:) = dek%XWATBUD(:) * zcorr_slope(:)
173  !
174  ENDIF
175  !
176  END IF
177  !
178  IF (osurf_misc_budget) THEN
179  !
180  dmk%XTWSNOW(:) = dmk%XTWSNOW(:) * zcorr_slope(:)
181  dmk%XTDSNOW(:) = dmk%XTDSNOW(:) * zcorr_slope(:)
182  !
183  IF ( pek%TSNOW%SCHEME=='3-L' .OR. pek%TSNOW%SCHEME=='CRO' ) THEN
184  !
185  WHERE(dmk%XSNOWDZ/=xundef)
186  dmk%XSNOWLIQ(:,:) = dmk%XSNOWLIQ(:,:) * zcorr_slope_2d(:,:)
187  dmk%XSNOWDZ (:,:) = dmk%XSNOWDZ (:,:) * zcorr_slope_2d(:,:)
188  ENDWHERE
189  !
190  IF ( pek%TSNOW%SCHEME=='CRO' ) THEN
191  !PRINT*,ZCORR_SLOPE(:)
192  !PRINT*,DMK%XSNDPT_1DY (:)
193  !PRINT*,DMK%XTDSNOW(:)
194  !PRINT*,DMK%XTSNOW(:)
195  WHERE(dmk%XTWSNOW>0.)
196  dmk%XSNDPT_1DY (:) = dmk%XSNDPT_1DY (:) * zcorr_slope(:)
197  dmk%XSNDPT_3DY (:) = dmk%XSNDPT_3DY (:) * zcorr_slope(:)
198  dmk%XSNDPT_5DY (:) = dmk%XSNDPT_5DY (:) * zcorr_slope(:)
199  dmk%XSNDPT_7DY (:) = dmk%XSNDPT_7DY (:) * zcorr_slope(:)
200  dmk%XSNSWE_1DY (:) = dmk%XSNSWE_1DY (:) * zcorr_slope(:)
201  dmk%XSNSWE_3DY (:) = dmk%XSNSWE_3DY (:) * zcorr_slope(:)
202  dmk%XSNSWE_5DY (:) = dmk%XSNSWE_5DY (:) * zcorr_slope(:)
203  dmk%XSNSWE_7DY (:) = dmk%XSNSWE_7DY (:) * zcorr_slope(:)
204  dmk%XSNRAM_SONDE (:) = dmk%XSNRAM_SONDE (:) * zcorr_slope(:)
205  dmk%XSN_REFRZNTHCKN(:) = dmk%XSN_REFRZNTHCKN(:) * zcorr_slope(:)
206  dmk%XSN_WETTHCKN (:) = dmk%XSN_WETTHCKN (:) * zcorr_slope(:)
207  ENDWHERE
208  ENDIF
209  !
210  ENDIF
211  !
212  ENDIF
213  !
214 ENDIF
215 !
216 IF (lhook) CALL dr_hook('REPROJ_DIAG_ISBA_N',1,zhook_handle)
217 !-------------------------------------------------------------------------------------
218 !
219 END SUBROUTINE reproj_diag_isba_n
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
subroutine reproj_diag_isba_n(DK, DEK, DMK, PEK, OSURF_BUDGET, OSURF_EVAP_BUDGET, OWATER_BUDGET, OSURF_MISC_BUDGET, OPROSNOW, OMEB_PATCH, PSLOPECOS)
logical lhook
Definition: yomhook.F90:15