SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
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 (I, &
7  ki,ksw,pzenith,psw_bands,pdir_alb,&
8  psca_alb,pemis,ptsrad,ptsurf )
9 ! ################################################################
10 !
11 !!**** *UPDATE_ESM_ISBA_n* - update ISBA radiative and physical properties in Earth System Model
12 !! after the call to OASIS coupler in order
13 !! to close the energy budget between radiative scheme and surfex
14 !!
15 !!
16 !! PURPOSE
17 !! -------
18 !!
19 !!** METHOD
20 !! ------
21 !!
22 !! EXTERNAL
23 !! --------
24 !!
25 !!
26 !! IMPLICIT ARGUMENTS
27 !! ------------------
28 !!
29 !! REFERENCE
30 !! ---------
31 !!
32 !!
33 !! AUTHOR
34 !! ------
35 !! B. Decharme
36 !!
37 !! MODIFICATIONS
38 !! -------------
39 !! Original 09/2009
40 !! B. Decharme 06/2013 new coupling variables
41 !! P. Samuelsson 10/2014 MEB
42 !-------------------------------------------------------------------------------
43 !
44 !* 0. DECLARATIONS
45 ! ------------
46 !
47 !
48 USE modd_isba_n, ONLY : isba_t
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 !
67 TYPE(isba_t), INTENT(INOUT) :: i
68 !
69 INTEGER, INTENT(IN) :: ki ! number of points
70 INTEGER, INTENT(IN) :: ksw ! number of short-wave spectral bands
71 !
72 REAL, DIMENSION(KI), INTENT(IN) :: pzenith ! solar zenithal angle
73 REAL, DIMENSION(KSW), INTENT(IN) :: psw_bands ! short-wave spectral bands
74 !
75 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: pdir_alb ! direct albedo for each band
76 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: psca_alb ! diffuse albedo for each band
77 REAL, DIMENSION(KI), INTENT(OUT) :: pemis ! emissivity
78 REAL, DIMENSION(KI), INTENT(OUT) :: ptsrad ! radiative temperature
79 REAL, DIMENSION(KI), INTENT(OUT) :: ptsurf ! surface effective temperature (K)
80 !
81 !
82 !* 0.2 Declarations of local variables
83 ! -------------------------------
84 !
85 REAL, DIMENSION(KI,KSW,I%NPATCH) :: zdir_alb_patch
86 REAL, DIMENSION(KI,KSW,I%NPATCH) :: zsca_alb_patch
87 REAL, DIMENSION(KI,I%NPATCH) :: zemis_patch
88 REAL, DIMENSION(KI,I%NPATCH) :: ztsrad_patch
89 REAL, DIMENSION(KI,I%NPATCH) :: ztsurf_patch
90 REAL, DIMENSION(KI,I%NPATCH) :: zemis ! emissivity with flood
91 !
92 LOGICAL :: lexplicit_snow ! snow scheme key
93 !
94 REAL(KIND=JPRB) :: zhook_handle
95 !
96 !-------------------------------------------------------------------------------
97 !
98 !* 1. Defaults
99 ! --------
100 !
101 IF (lhook) CALL dr_hook('UPDATE_ESM_ISBA_N',0,zhook_handle)
102 !
103 zdir_alb_patch(:,:,:) = 0.0
104 zsca_alb_patch(:,:,:) = 0.0
105 zemis_patch(:,: ) = 0.0
106 zemis(:,: ) = i%XEMIS(:,:)
107 !
108 lexplicit_snow = (i%TSNOW%SCHEME=='3-L'.OR.i%TSNOW%SCHEME=='CRO')
109 !
110 ztsrad_patch(:,:) = i%XTG(:,1,:)
111 ztsurf_patch(:,:) = i%XTG(:,1,:)
112 !
113 !
114 !* 2. Update nature albedo and emissivity
115 ! -----------------------------------
116 !
117  CALL update_rad_isba_n(i, &
118  i%LFLOOD,i%TSNOW%SCHEME,pzenith,psw_bands,i%XVEG,i%XLAI,i%XZ0, &
119  i%LMEB_PATCH,i%XLAIGV,i%XGNDLITTER,i%XZ0LITTER,i%XH_VEG, &
120  i%XALBNIR,i%XALBVIS,i%XALBUV,i%XEMIS, &
121  zdir_alb_patch,zsca_alb_patch,zemis_patch )
122 !
123 !* 3. radiative surface temperature
124 ! -----------------------------
125 !
126 IF(lexplicit_snow.AND.i%LFLOOD)THEN
127  WHERE(i%XPSN(:,:)<1.0.AND.i%XEMIS(:,:)/=xundef)
128  zemis(:,:) = ((1.-i%XFF(:,:)-i%XPSN(:,:))*i%XEMIS(:,:) + i%XFF(:,:)*i%XEMISF(:,:)) / (1.-i%XPSN(:,:))
129  ENDWHERE
130 ENDIF
131 !
132 IF(lexplicit_snow)THEN
133  WHERE(i%XEMIS(:,:)/=xundef.AND.zemis_patch(:,:)/=0.)
134  ztsrad_patch(:,:) = ( ( (1.-i%XPSN(:,:))*zemis(:,:)*i%XTG (:,1,:)**4 &
135  + i%XPSN(:,:) *i%TSNOW%EMIS(:,:)*i%TSNOW%TS(:,:)**4 ) &
136  / zemis_patch(:,:) )**0.25
137  ENDWHERE
138 ENDIF
139 !
140 !
141 !* 4. averaged fields
142 ! ---------------
143 !
144  CALL average_rad(i%XPATCH, &
145  zdir_alb_patch, zsca_alb_patch, zemis_patch, ztsrad_patch, &
146  pdir_alb, psca_alb, i%XEMIS_NAT, i%XTSRAD_NAT )
147 !
148 pemis = i%XEMIS_NAT
149 ptsrad = i%XTSRAD_NAT
150 !
151 !* averaged effective temperature
152 !
153 IF(lexplicit_snow)THEN
154  ztsurf_patch(:,:) = i%XTG(:,1,:)*(1.-i%XPSN(:,:)) + i%TSNOW%TS(:,:)*i%XPSN(:,:)
155 ENDIF
156 !
157  CALL average_tsurf(i%XPATCH, ztsurf_patch, ptsurf)
158 !
159 IF (lhook) CALL dr_hook('UPDATE_ESM_ISBA_N',1,zhook_handle)
160 !
161 !-------------------------------------------------------------------------------
162 !
163 END SUBROUTINE update_esm_isba_n
subroutine average_tsurf(PFRAC_TILE, PTSURF_TILE, PTSURF)
subroutine update_esm_isba_n(I, KI, KSW, PZENITH, PSW_BANDS, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD, PTSURF)
subroutine update_rad_isba_n(I, OFLOOD, HSNOW, PZENITH, PSW_BANDS, PVEG, PLAI, PZ0, OMEB_PATCH, PLAIGV, PGNDLITTER, PZ0LITTER, PH_VEG, PALBNIR, PALBVIS, PALBUV, PEMIS, PDIR_ALB_WITH_SNOW, PSCA_ALB_WITH_SNOW, PEMIST, PDIR_SW, PSCA_SW, PALBNIR_VEG, PALBNIR_SOIL, PALBVIS_VEG, PALBVIS_SOIL)
subroutine average_rad(PFRAC_TILE, PDIR_ALB_TILE, PSCA_ALB_TILE, PEMIS_TILE, PTRAD_TILE, PDIR_ALB, PSCA_ALB, PEMIS, PTRAD)
Definition: average_rad.F90:6