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