SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
coupling_naturen.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 coupling_nature_n (DTCO, UG, U, USS, IM, DTZ, DTGD, DTGR, TGRO, DGL, DST, SLT, &
7  hprogram, hcoupling, ptimec, &
8  ptstep, kyear, kmonth, kday, ptime, ki, ksv, ksw, ptsun, pzenith, pzenith2, &
9  pazim, pzref, puref, pzs, pu, pv, pqa, pta, prhoa, psv, pco2, hsv, &
10  prain, psnow, plw, pdir_sw, psca_sw, psw_bands, pps, ppa, &
11  psftq, psfth, psfts, psfco2, psfu, psfv, &
12  ptrad, pdir_alb, psca_alb, pemis, ptsurf, pz0, pz0h, pqsurf, &
13  ppew_a_coef, ppew_b_coef, &
14  ppet_a_coef, ppeq_a_coef, ppet_b_coef, ppeq_b_coef, &
15  htest )
16 ! ###############################################################################
17 !
18 !!**** *COUPLING_NATURE_n * - Chooses the surface schemes for natural continental parts
19 !!
20 !! PURPOSE
21 !! -------
22 !
23 !!** METHOD
24 !! ------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !!
30 !! AUTHOR
31 !! ------
32 !! V. Masson
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 01/2004
37 !! B. Decharme 04/2013 new coupling variables
38 !! P. Le Moigne 03/2015 tsz0 time management
39 !!--------------------------------------------------------------------
40 !
41 !
42 !
43 USE modd_surfex_n, ONLY : isba_model_t
44 !
47 USE modd_surf_atm_n, ONLY : surf_atm_t
49 USE modd_data_tsz0_n, ONLY : data_tsz0_t
54 USE modd_dst_n, ONLY : dst_t
55 USE modd_slt_n, ONLY : slt_t
56 !
57 USE modd_csts, ONLY : xtt
58 !
59 USE yomhook ,ONLY : lhook, dr_hook
60 USE parkind1 ,ONLY : jprb
61 !
62 USE modi_coupling_ideal_flux
63 !
64 USE modi_coupling_isba_svat_n
65 !
66 USE modi_coupling_tsz0_n
67 !
68 IMPLICIT NONE
69 !
70 !* 0.1 declarations of arguments
71 !
72 !
73 TYPE(isba_model_t), INTENT(INOUT) :: im
74 TYPE(data_cover_t), INTENT(INOUT) :: dtco
75 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
76 TYPE(surf_atm_t), INTENT(INOUT) :: u
77 TYPE(surf_atm_sso_t), INTENT(INOUT) :: uss
78 TYPE(data_tsz0_t), INTENT(INOUT) :: dtz
79 TYPE(data_teb_garden_t), INTENT(INOUT) :: dtgd
80 TYPE(data_teb_greenroof_t), INTENT(INOUT) :: dtgr
81 TYPE(teb_greenroof_options_t), INTENT(INOUT) :: tgro
82 TYPE(diag_ideal_t), INTENT(INOUT) :: dgl
83 TYPE(dst_t), INTENT(INOUT) :: dst
84 TYPE(slt_t), INTENT(INOUT) :: slt
85 !
86  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
87  CHARACTER(LEN=1), INTENT(IN) :: hcoupling ! type of coupling
88  ! 'E' : explicit
89  ! 'I' : implicit
90 REAL, INTENT(IN) :: ptimec ! cumulated time since beginning of simulation
91 INTEGER, INTENT(IN) :: kyear ! current year (UTC)
92 INTEGER, INTENT(IN) :: kmonth ! current month (UTC)
93 INTEGER, INTENT(IN) :: kday ! current day (UTC)
94 REAL, INTENT(IN) :: ptime ! current time since midnight (UTC, s)
95 INTEGER, INTENT(IN) :: ki ! number of points
96 INTEGER, INTENT(IN) :: ksv ! number of scalars
97 INTEGER, INTENT(IN) :: ksw ! number of short-wave spectral bands
98 REAL, DIMENSION(KI), INTENT(IN) :: ptsun ! solar time (s from midnight)
99 REAL, INTENT(IN) :: ptstep ! atmospheric time-step (s)
100 REAL, DIMENSION(KI), INTENT(IN) :: pzref ! height of T,q forcing (m)
101 REAL, DIMENSION(KI), INTENT(IN) :: puref ! height of wind forcing (m)
102 !
103 REAL, DIMENSION(KI), INTENT(IN) :: pta ! air temperature forcing (K)
104 REAL, DIMENSION(KI), INTENT(IN) :: pqa ! air humidity forcing (kg/m3)
105 REAL, DIMENSION(KI), INTENT(IN) :: prhoa ! air density (kg/m3)
106 REAL, DIMENSION(KI,KSV),INTENT(IN) :: psv ! scalar variables
107 ! ! chemistry: first char. in HSV: '#' (molecule/m3)
108 ! !
109  CHARACTER(LEN=6), DIMENSION(KSV),INTENT(IN):: hsv ! name of all scalar variables
110 REAL, DIMENSION(KI), INTENT(IN) :: pu ! zonal wind (m/s)
111 REAL, DIMENSION(KI), INTENT(IN) :: pv ! meridian wind (m/s)
112 REAL, DIMENSION(KI,KSW),INTENT(IN) :: pdir_sw ! direct solar radiation (on horizontal surf.)
113 ! ! (W/m2)
114 REAL, DIMENSION(KI,KSW),INTENT(IN) :: psca_sw ! diffuse solar radiation (on horizontal surf.)
115 ! ! (W/m2)
116 REAL, DIMENSION(KSW),INTENT(IN) :: psw_bands ! mean wavelength of each shortwave band (m)
117 REAL, DIMENSION(KI), INTENT(IN) :: pzenith ! zenithal angle at t (radian from the vertical)
118 REAL, DIMENSION(KI), INTENT(IN) :: pzenith2 ! zenithal angle at t+1 (radian from the vertical)
119 REAL, DIMENSION(KI), INTENT(IN) :: pazim ! azimuthal angle (radian from North, clockwise)
120 REAL, DIMENSION(KI), INTENT(IN) :: plw ! longwave radiation (on horizontal surf.)
121 ! ! (W/m2)
122 REAL, DIMENSION(KI), INTENT(IN) :: pps ! pressure at atmospheric model surface (Pa)
123 REAL, DIMENSION(KI), INTENT(IN) :: ppa ! pressure at forcing level (Pa)
124 REAL, DIMENSION(KI), INTENT(IN) :: pzs ! atmospheric model orography (m)
125 REAL, DIMENSION(KI), INTENT(IN) :: pco2 ! CO2 concentration in the air (kg/m3)
126 REAL, DIMENSION(KI), INTENT(IN) :: psnow ! snow precipitation (kg/m2/s)
127 REAL, DIMENSION(KI), INTENT(IN) :: prain ! liquid precipitation (kg/m2/s)
128 !
129 !
130 REAL, DIMENSION(KI), INTENT(OUT) :: psfth ! flux of heat (W/m2)
131 REAL, DIMENSION(KI), INTENT(OUT) :: psftq ! flux of water vapor (kg/m2/s)
132 REAL, DIMENSION(KI), INTENT(OUT) :: psfu ! zonal momentum flux (Pa)
133 REAL, DIMENSION(KI), INTENT(OUT) :: psfv ! meridian momentum flux (Pa)
134 REAL, DIMENSION(KI), INTENT(OUT) :: psfco2 ! flux of CO2 (m/s*kg_CO2/kg_air)
135 REAL, DIMENSION(KI,KSV),INTENT(OUT):: psfts ! flux of scalar var. (kg/m2/s)
136 !
137 REAL, DIMENSION(KI), INTENT(OUT) :: ptrad ! radiative temperature (K)
138 REAL, DIMENSION(KI,KSW),INTENT(OUT):: pdir_alb! direct albedo for each spectral band (-)
139 REAL, DIMENSION(KI,KSW),INTENT(OUT):: psca_alb! diffuse albedo for each spectral band (-)
140 REAL, DIMENSION(KI), INTENT(OUT) :: pemis ! emissivity (-)
141 !
142 REAL, DIMENSION(KI), INTENT(OUT) :: ptsurf ! surface effective temperature (K)
143 REAL, DIMENSION(KI), INTENT(OUT) :: pz0 ! roughness length for momentum (m)
144 REAL, DIMENSION(KI), INTENT(OUT) :: pz0h ! roughness length for heat (m)
145 REAL, DIMENSION(KI), INTENT(OUT) :: pqsurf ! specific humidity at surface (kg/kg)
146 !
147 REAL, DIMENSION(KI), INTENT(IN) :: ppew_a_coef! implicit coefficients
148 REAL, DIMENSION(KI), INTENT(IN) :: ppew_b_coef! needed if HCOUPLING='I'
149 REAL, DIMENSION(KI), INTENT(IN) :: ppet_a_coef
150 REAL, DIMENSION(KI), INTENT(IN) :: ppeq_a_coef
151 REAL, DIMENSION(KI), INTENT(IN) :: ppet_b_coef
152 REAL, DIMENSION(KI), INTENT(IN) :: ppeq_b_coef
153  CHARACTER(LEN=2), INTENT(IN) :: htest ! must be equal to 'OK'
154 REAL(KIND=JPRB) :: zhook_handle
155 !
156 !* 0.2 declarations of local variables
157 !
158 !-------------------------------------------------------------------------------------
159 !
160 IF (lhook) CALL dr_hook('COUPLING_NATURE_N',0,zhook_handle)
161 IF (u%CNATURE=='ISBA ') THEN
162  CALL coupling_isba_svat_n(dtco, ug, u, uss, im, dtgd, dtgr, tgro, dst, slt, &
163  hprogram, hcoupling, &
164  ptstep, kyear, kmonth, kday, ptime, &
165  ki,ksv,ksw, &
166  ptsun, pzenith, pzenith2, pazim, &
167  pzref, puref, pzs, pu, pv, pqa, pta, prhoa, psv, pco2, hsv, &
168  prain, psnow, plw, pdir_sw, psca_sw, psw_bands, pps, ppa, &
169  psftq, psfth, psfts, psfco2, psfu, psfv, &
170  ptrad, pdir_alb, psca_alb, pemis, ptsurf, pz0, pz0h, pqsurf, &
171  ppew_a_coef, ppew_b_coef, &
172  ppet_a_coef, ppeq_a_coef, ppet_b_coef, ppeq_b_coef, &
173  'OK' )
174 ELSE IF (u%CNATURE=='TSZ0 ') THEN
175  CALL coupling_tsz0_n(dtco, ug, u, uss, im, dtz, dtgd, dtgr, tgro, dst, slt, &
176  hprogram, hcoupling, &
177  ptstep, kyear, kmonth, kday, ptimec, &
178  ki,ksv,ksw, &
179  ptsun, pzenith, pzenith2, pazim, &
180  pzref, puref, pzs, pu, pv, pqa, pta, prhoa, psv, pco2, hsv, &
181  prain, psnow, plw, pdir_sw, psca_sw, psw_bands, pps, ppa, &
182  psftq, psfth, psfts, psfco2, psfu, psfv, &
183  ptrad, pdir_alb, psca_alb, pemis, ptsurf, pz0, pz0h, pqsurf, &
184  ppew_a_coef, ppew_b_coef, &
185  ppet_a_coef, ppeq_a_coef, ppet_b_coef, ppeq_b_coef, &
186  'OK' )
187 ELSE IF (u%CNATURE=='FLUX ') THEN
188  CALL coupling_ideal_flux(dgl, &
189  hprogram, hcoupling, ptimec, &
190  ptstep, kyear, kmonth, kday, ptime, &
191  ki,ksv,ksw, &
192  ptsun, pzenith, pazim, &
193  pzref, puref, pzs, pu, pv, pqa, pta, prhoa, psv, pco2, hsv, &
194  prain, psnow, plw, pdir_sw, psca_sw, psw_bands, pps, ppa, &
195  psftq, psfth, psfts, psfco2, psfu, psfv, &
196  ptrad, pdir_alb, psca_alb, pemis, ptsurf, pz0, pz0h, pqsurf, &
197  ppew_a_coef, ppew_b_coef, &
198  ppet_a_coef, ppeq_a_coef, ppet_b_coef, ppeq_b_coef, &
199  'OK' )
200 ELSE IF (u%CNATURE=='NONE ') THEN
201  psfth = 0.
202  psftq = 0.
203  psfts = 0.
204  psfu = 0.
205  psfv = 0.
206  psfco2= 0.
207 !
208  ptrad = xtt
209  pdir_alb = 0.
210  psca_alb = 0.
211  pemis = 1.
212 !
213  ptsurf = xtt
214  pz0 = 0.01
215  pz0h = 0.001
216  pqsurf = 0.0
217 !
218 END IF
219 IF (lhook) CALL dr_hook('COUPLING_NATURE_N',1,zhook_handle)
220 !
221 !-------------------------------------------------------------------------------------
222 !
223 END SUBROUTINE coupling_nature_n
subroutine coupling_nature_n(DTCO, UG, U, USS, IM, DTZ, DTGD, DTGR, TGRO, DGL, DST, SLT, HPROGRAM, HCOUPLING, PTIMEC, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, PUREF, PZS, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST)
subroutine coupling_ideal_flux(DGL, HPROGRAM, HCOUPLING, PTIMEC, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PAZIM, PZREF, PUREF, PZS, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST)
subroutine coupling_tsz0_n(DTCO, UG, U, USS, IM, DTZ, DTGD, DTGR, TGRO, DST, SLT, HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, PUREF, PZS, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST)
subroutine coupling_isba_svat_n(DTCO, UG, U, USS, IM, DTGD, DTGR, TGRO, DST, SLT, HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, PUREF, PZS, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST)