SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
rout_data_isba.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 ! #####################
7  SUBROUTINE rout_data_isba (DGEI, DGMI, IG, I, UG, U, &
8  hprogram,ki,kstep)
9 ! #####################
10 !
11 !!**** *ROUT_DATA_ISBA*
12 !!
13 !! PURPOSE
14 !! -------
15 !
16 ! Routes runoff and drainage of ISBA with coupling with Topmodel
17 !
18 !
19 !!** METHOD
20 !! ------
21 !
22 !! EXTERNAL
23 !! --------
24 !!
25 !! none
26 !!
27 !! IMPLICIT ARGUMENTS
28 !! ------------------
29 !!
30 !!
31 !!
32 !!
33 !!
34 !! REFERENCE
35 !! ---------
36 !!
37 !!
38 !!
39 !! AUTHOR
40 !! ------
41 !!
42 !! B. Vincendon * Meteo-France *
43 !!
44 !! MODIFICATIONS
45 !! -------------
46 !!
47 !! Original 15/06/2007
48 !! 03/2014 (B. Vincendon) call of initialisation for budget on watersheds
49 !-------------------------------------------------------------------------------
50 !
51 !* 0. DECLARATIONS
52 ! ------------
53 !
54 !
55 !
56 !
59 USE modd_isba_grid_n, ONLY : isba_grid_t
60 USE modd_isba_n, ONLY : isba_t
62 USE modd_surf_atm_n, ONLY : surf_atm_t
63 !
64 USE modi_get_luout
66 USE modi_diag_isba_to_rout
67 USE modi_isba_to_topd
68 USE modi_init_budget_coupl_rout
69 USE modi_routing
70 !
71 USE modd_topodyn, ONLY : nncat, nmesht, nnmc
72 USE modd_coupling_topd, ONLY : nmaskt, xrunoff_top, xatop, nnpix,&
73  xavg_runoffcm, xavg_draincm, lbudget_topd
74 !
75 USE modd_surf_par, ONLY : xundef
76 !
77 USE yomhook ,ONLY : lhook, dr_hook
78 USE parkind1 ,ONLY : jprb
79 !
80 IMPLICIT NONE
81 !
82 !* 0.1 declarations of arguments
83 !
84 !
85 TYPE(diag_evap_isba_t), INTENT(INOUT) :: dgei
86 TYPE(diag_misc_isba_t), INTENT(INOUT) :: dgmi
87 TYPE(isba_grid_t), INTENT(INOUT) :: ig
88 TYPE(isba_t), INTENT(INOUT) :: i
89 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
90 TYPE(surf_atm_t), INTENT(INOUT) :: u
91 !
92  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
93 INTEGER, INTENT(IN) :: ki ! Grid dimensions
94 INTEGER, INTENT(IN) :: kstep ! current time step
95 !
96 !* 0.2 declarations of local variables
97 !
98 INTEGER :: jj,ji ! loop control
99 INTEGER :: iluout ! unit number of listing file
100  CHARACTER(LEN=30) :: yvar
101 REAL, DIMENSION(KI) :: zrunoffc_full ! Cumulated runoff from isba on the full domain (kg/m2)
102 REAL, DIMENSION(KI) :: zrunoffc_fullm ! Cumulated runoff from isba on the full domain (kg/m2) at t-dt
103 REAL, DIMENSION(KI) :: zrunoff_isba ! Runoff from Isba (kg/m2)
104 REAL, DIMENSION(KI) :: zdrainc_full ! Cumulated drainage from Isba on the full domain (kg/m2)
105 REAL, DIMENSION(KI) :: zdrainc_fullm ! Cumulated drainage from Isba on the full domain (kg/m2) at t-dt
106 REAL, DIMENSION(KI) :: zdrain_isba ! Drainage from Isba (m3/s)
107 REAL, DIMENSION(NNCAT,NMESHT) :: zrunoff_topd ! Runoff on the Topodyn grid (m3/s)
108 REAL, DIMENSION(NNCAT,NMESHT) :: zdrain_topd ! Drainage from Isba on Topodyn grid (m3/s)
109 REAL(KIND=JPRB) :: zhook_handle
110 !-------------------------------------------------------------------------------
111 IF (lhook) CALL dr_hook('ROUT_DATA_ISBA',0,zhook_handle)
112 !
113  CALL get_luout(hprogram,iluout)
114 !
115 zrunoffc_full(:) = 0.
116 zrunoffc_fullm(:) = 0.
117 zrunoff_isba(:) = 0.
118 zrunoff_topd(:,:) = 0.
119 zdrainc_full(:) = 0.
120 zdrainc_fullm(:) = 0.
121 zdrain_isba(:) = 0.
122 zdrain_topd(:,:) = 0.
123 IF (kstep==1 .AND. lbudget_topd) CALL init_budget_coupl_rout(dgei, dgmi, ig, i, u, &
124  ki)
125 !
126 ! Runoff on TOPODYN grid
127 ! ---------------------------------------
128 !
129  CALL unpack_same_rank(u%NR_NATURE,dgei%XAVG_RUNOFFC,zrunoffc_full)
130  CALL unpack_same_rank(u%NR_NATURE,xavg_runoffcm,zrunoffc_fullm)
131 !
132  CALL diag_isba_to_rout(ug, &
133  zrunoffc_full,zrunoffc_fullm,zrunoff_isba)
134 !
135 xavg_runoffcm(:) = dgei%XAVG_RUNOFFC(:)
136 zrunoff_topd(:,:) = 0.0
137 !
138  CALL isba_to_topd(zrunoff_isba,zrunoff_topd)
139 !
140 DO jj=1,nncat
141  DO ji=1,nnmc(jj)
142  zrunoff_topd(jj,ji) = zrunoff_topd(jj,ji) / nnpix(nmaskt(jj,ji))
143  ENDDO
144 ENDDO
145 !
146 ! Drainage treatment
147 ! ----------------------------------------
148 !
149  CALL unpack_same_rank(u%NR_NATURE,dgei%XAVG_DRAINC*xatop,zdrainc_full)
150  CALL unpack_same_rank(u%NR_NATURE,xavg_draincm*xatop,zdrainc_fullm)
151 !
152  CALL diag_isba_to_rout(ug, &
153  zdrainc_full,zdrainc_fullm,zdrain_isba)
154 !
155 xavg_draincm(:) = dgei%XAVG_DRAINC(:)
156 zdrain_topd(:,:) = 0.0
157 !
158  CALL isba_to_topd(zdrain_isba,zdrain_topd)
159 !
160 DO jj=1,nncat
161  DO ji=1,nnmc(jj)
162  zdrain_topd(jj,ji) = zdrain_topd(jj,ji) / nnpix(nmaskt(jj,ji))
163  ENDDO
164 ENDDO
165 !* Routing (runoff + drainage)
166 ! ----------------------------------------
167 !
168  CALL routing(zrunoff_topd,zdrain_topd,kstep)
169 !
170 IF (lhook) CALL dr_hook('ROUT_DATA_ISBA',1,zhook_handle)
171 !
172 END SUBROUTINE rout_data_isba
subroutine routing(PRO, PDR, KSTEP)
Definition: routing.F90:7
subroutine rout_data_isba(DGEI, DGMI, IG, I, UG, U, HPROGRAM, KI, KSTEP)
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:6
subroutine diag_isba_to_rout(UG, PVARC, PVARCP, PVARROUT)
subroutine isba_to_topd(PVARI, PVART)
Definition: isba_to_topd.F90:7
subroutine init_budget_coupl_rout(DGEI, DGMI, IG, I, U, KNI)