SURFEX v8.1
General documentation of Surfex
update_esm_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 update_esm_isba_n (IO, S, K, NK, NP, NPE, KI,KSW,PZENITH,PSW_BANDS,PDIR_ALB,&
7  PSCA_ALB,PEMIS,PTSRAD,PTSURF )
8 ! ################################################################
9 !
10 !!**** *UPDATE_ESM_ISBA_n* - update ISBA radiative and physical properties in Earth System Model
11 !! after the call to OASIS coupler in order
12 !! to close the energy budget between radiative scheme and surfex
13 !!
14 !!
15 !! PURPOSE
16 !! -------
17 !!
18 !!** METHOD
19 !! ------
20 !!
21 !! EXTERNAL
22 !! --------
23 !!
24 !!
25 !! IMPLICIT ARGUMENTS
26 !! ------------------
27 !!
28 !! REFERENCE
29 !! ---------
30 !!
31 !!
32 !! AUTHOR
33 !! ------
34 !! B. Decharme
35 !!
36 !! MODIFICATIONS
37 !! -------------
38 !! Original 09/2009
39 !! B. Decharme 06/2013 new coupling variables
40 !! P. Samuelsson 10/2014 MEB
41 !-------------------------------------------------------------------------------
42 !
43 !* 0. DECLARATIONS
44 ! ------------
45 !
49 !
51 USE modd_surf_par, ONLY : xundef
52 !
53 USE modi_average_rad
54 USE modi_average_tsurf
55 USE modi_update_rad_isba_n
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(isba_options_t), INTENT(INOUT) :: IO
67 TYPE(isba_s_t), INTENT(INOUT) :: S
68 TYPE(isba_k_t), INTENT(INOUT) :: K
69 TYPE(isba_nk_t), INTENT(INOUT) :: NK
70 TYPE(isba_np_t), INTENT(INOUT) :: NP
71 TYPE(isba_npe_t), INTENT(INOUT) :: NPE
72 !
73 INTEGER, INTENT(IN) :: KI ! number of points
74 INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands
75 !
76 REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! solar zenithal angle
77 REAL, DIMENSION(KSW), INTENT(IN) :: PSW_BANDS ! short-wave spectral bands
78 !
79 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB ! direct albedo for each band
80 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB ! diffuse albedo for each band
81 REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity
82 REAL, DIMENSION(KI), INTENT(OUT) :: PTSRAD ! radiative temperature
83 REAL, DIMENSION(KI), INTENT(OUT) :: PTSURF ! surface effective temperature (K)
84 !
85 !
86 !* 0.2 Declarations of local variables
87 ! -------------------------------
88 !
89 TYPE(isba_k_t), POINTER :: KK
90 TYPE(isba_p_t), POINTER :: PK
91 TYPE(isba_pe_t), POINTER :: PEK
92 !
93 REAL, DIMENSION(KI,KSW,IO%NPATCH) :: ZDIR_ALB_PATCH
94 REAL, DIMENSION(KI,KSW,IO%NPATCH) :: ZSCA_ALB_PATCH
95 REAL, DIMENSION(KI,IO%NPATCH) :: ZEMIS_PATCH
96 REAL, DIMENSION(KI,IO%NPATCH) :: ZTSRAD_PATCH
97 REAL, DIMENSION(KI,IO%NPATCH) :: ZTSURF_PATCH
98 REAL, DIMENSION(KI,IO%NPATCH) :: ZEMIS ! emissivity with flood
99 !
100 LOGICAL :: LEXPLICIT_SNOW ! snow scheme key
101 !
102 INTEGER :: IMASK, JI, JP
103 !
104 REAL(KIND=JPRB) :: ZHOOK_HANDLE
105 !
106 !-------------------------------------------------------------------------------
107 !
108 !* 1. Defaults
109 ! --------
110 !
111 IF (lhook) CALL dr_hook('UPDATE_ESM_ISBA_N',0,zhook_handle)
112 !
113 zdir_alb_patch(:,:,:) = 0.0
114 zsca_alb_patch(:,:,:) = 0.0
115 zemis_patch(:,: ) = 0.0
116 !
117 lexplicit_snow = (npe%AL(1)%TSNOW%SCHEME=='3-L'.OR.npe%AL(1)%TSNOW%SCHEME=='CRO')
118 !
119 !
120 !
121 !* 2. Update nature albedo and emissivity
122 ! -----------------------------------
123 !
124 zemis(:,:) = 0.0
125 ztsrad_patch(:,:) = 0.0
126 ztsurf_patch(:,:) = 0.0
127 !
128 DO jp = 1,io%NPATCH
129  pk => np%AL(jp)
130  pek => npe%AL(jp)
131  kk => nk%AL(jp)
132 
133  CALL update_rad_isba_n(io, s, kk, pk, pek, jp, pzenith, psw_bands, &
134  zdir_alb_patch(:,:,jp),zsca_alb_patch(:,:,jp),zemis_patch(:,jp) )
135  !
136  !* 3. radiative surface temperature
137  ! -----------------------------
138  !
139  DO ji = 1,pk%NSIZE_P
140  imask = pk%NR_P(ji)
141 
142  zemis(imask,jp) = pek%XEMIS(ji)
143 
144  IF(lexplicit_snow.AND.io%LFLOOD)THEN
145  IF (pek%XPSN(ji)<1.0.AND.pek%XEMIS(ji)/=xundef) THEN
146  zemis(imask,jp) = ((1.-kk%XFF(ji)-pek%XPSN(ji))*pek%XEMIS(ji) + &
147  kk%XFF(ji)*kk%XEMISF(ji)) / (1.-pek%XPSN(ji))
148  ENDIF
149  ENDIF
150  !
151  ztsrad_patch(imask,jp) = pek%XTG(ji,1)
152  ztsurf_patch(imask,jp) = pek%XTG(ji,1)
153  !
154  IF(lexplicit_snow)THEN
155  IF(pek%XEMIS(ji)/=xundef.AND.zemis_patch(imask,jp)/=0.) THEN
156  ztsrad_patch(imask,jp) = ( ( (1.-pek%XPSN(ji))*zemis(imask,jp)*pek%XTG(ji,1)**4 &
157  + pek%XPSN(ji) *pek%TSNOW%EMIS(ji)*pek%TSNOW%TS(ji)**4 ) &
158  / zemis_patch(imask,jp) )**0.25
159  ENDIF
160  ztsurf_patch(imask,jp) = pek%XTG(ji,1)*(1.-pek%XPSN(ji)) + pek%TSNOW%TS(ji)*pek%XPSN(ji)
161 
162  ENDIF
163  !
164  ENDDO
165  !
166 ENDDO
167 !
168 !* 4. averaged fields
169 ! ---------------
170 !
171  CALL average_rad(s%XPATCH, &
172  zdir_alb_patch, zsca_alb_patch, zemis_patch, ztsrad_patch, &
173  pdir_alb, psca_alb, s%XEMIS_NAT, s%XTSRAD_NAT )
174 !
175 pemis = s%XEMIS_NAT
176 ptsrad = s%XTSRAD_NAT
177 !
178 !* averaged effective temperature
179 !
180 !
181  CALL average_tsurf(s%XPATCH, ztsurf_patch, ptsurf)
182 !
183 IF (lhook) CALL dr_hook('UPDATE_ESM_ISBA_N',1,zhook_handle)
184 !
185 !-------------------------------------------------------------------------------
186 !
187 END SUBROUTINE update_esm_isba_n
subroutine average_tsurf(PFRAC_TILE, PTSURF_TILE, PTSURF)
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
subroutine update_esm_isba_n(IO, S, K, NK, NP, NPE, KI, KSW, PZENIT
logical lhook
Definition: yomhook.F90:15
subroutine average_rad(PFRAC_TILE, PDIR_ALB_TILE, PSCA_ALB_TILE, PEMIS_TILE, PTRAD_TILE,
Definition: average_rad.F90:8
subroutine update_rad_isba_n(IO, S, KK, PK, PEK, KPATCH, PZENITH, PSW_BANDS, PDIR_ALB_WITH_SNOW, PSCA_ALB_WITH_SNOW, PEMIST, PDIR_SW, PSCA_SW)