SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
assim_surf_atmn.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 assim_surf_atm_n (DGMI, IG, I, S, U, T, TOP, W, &
7  hprogram, ki, &
8  pcon_rain, pstrat_rain, pcon_snow, pstrat_snow, &
9  pclouds, plsm, pevaptr, pevap, &
10  pswec, ptsc, &
11  pts, pt2m, phu2m, pswe, &
12  psst, psic, pucls, pvcls, &
13  htest , od_maskext, plon, plat, olkeepextzone )
14 ! #################################################################################
15 !
16 !
17 !!**** *ASSIM_SURF_ATM_n * - Driver to call the schemes for the
18 !! four surface types (SEA, WATER, NATURE, TOWN)
19 !!
20 !! PURPOSE
21 !! -------
22 !!
23 !!** METHOD
24 !! ------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !!
30 !! AUTHOR
31 !! ------
32 !! T. Aspelien
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 04/2012
37 !!-------------------------------------------------------------
38 !
39 !
40 !
41 !
42 !
44 USE modd_isba_grid_n, ONLY : isba_grid_t
45 USE modd_isba_n, ONLY : isba_t
46 USE modd_seaflux_n, ONLY : seaflux_t
47 USE modd_surf_atm_n, ONLY : surf_atm_t
48 USE modd_teb_n, ONLY : teb_t
50 USE modd_watflux_n, ONLY : watflux_t
51 !
52 USE modd_surfex_mpi, ONLY : nrank, npio
53 !
54 USE modd_surf_conf, ONLY : cprogname
55 !
56 USE modd_assim, ONLY : xat2m_isba, xahu2m_isba, xazon10m_isba, xamer10m_isba, xat2m_teb, larome
57 !
58 !RJ: unneeded?
59 !
60 USE modi_abor1_sfx
61 USE modi_assim_sea_n
62 USE modi_assim_inland_water_n
63 USE modi_assim_nature_n
64 USE modi_assim_town_n
65 !
66 USE yomhook, ONLY : lhook, dr_hook
67 USE parkind1, ONLY : jprb
68 !
69 IMPLICIT NONE
70 !
71 !* 0.1 declarations of arguments
72 !
73 !
74 TYPE(diag_misc_isba_t), INTENT(INOUT) :: dgmi
75 TYPE(isba_grid_t), INTENT(INOUT) :: ig
76 TYPE(isba_t), INTENT(INOUT) :: i
77 TYPE(seaflux_t), INTENT(INOUT) :: s
78 TYPE(surf_atm_t), INTENT(INOUT) :: u
79 TYPE(teb_t), INTENT(INOUT) :: t
80 TYPE(teb_options_t), INTENT(INOUT) :: top
81 TYPE(watflux_t), INTENT(INOUT) :: w
82 !
83  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
84 INTEGER, INTENT(IN) :: ki
85 REAL, DIMENSION(KI), INTENT(IN) :: pcon_rain
86 REAL, DIMENSION(KI), INTENT(IN) :: pstrat_rain
87 REAL, DIMENSION(KI), INTENT(IN) :: pcon_snow
88 REAL, DIMENSION(KI), INTENT(IN) :: pstrat_snow
89 REAL, DIMENSION(KI), INTENT(IN) :: pclouds
90 REAL, DIMENSION(KI), INTENT(IN) :: plsm
91 REAL, DIMENSION(KI), INTENT(IN) :: pevaptr
92 REAL, DIMENSION(KI), INTENT(IN) :: pevap
93 REAL, DIMENSION(KI), INTENT(IN) :: pswec
94 REAL, DIMENSION(KI), INTENT(IN) :: ptsc
95 REAL, DIMENSION(KI), INTENT(IN) :: pts
96 REAL, DIMENSION(KI), INTENT(IN) :: pt2m
97 REAL, DIMENSION(KI), INTENT(IN) :: phu2m
98 REAL, DIMENSION(KI), INTENT(IN) :: pswe
99 REAL, DIMENSION(KI), INTENT(IN) :: psst
100 REAL, DIMENSION(KI), INTENT(IN) :: psic
101 REAL, DIMENSION(KI), INTENT(IN) :: pucls
102 REAL, DIMENSION(KI), INTENT(IN) :: pvcls
103  CHARACTER(LEN=2), INTENT(IN) :: htest ! must be equal to 'OK'
104 LOGICAL, DIMENSION (KI), INTENT(IN) :: od_maskext
105 REAL(KIND=JPRB), DIMENSION (:), INTENT(IN) :: plon
106 REAL(KIND=JPRB), DIMENSION (:), INTENT(IN) :: plat
107 LOGICAL, INTENT(IN) :: olkeepextzone
108 !
109 !* 0.2 declarations of local variables
110 !
111 INTEGER :: jtile ! loop on type of surface
112 LOGICAL :: gnature, gtown, gwater, gsea ! .T. if the corresponding surface is represented
113 REAL(KIND=JPRB) :: zhook_handle
114 !
115 !-------------------------------------------------------------------------------------
116 IF (lhook) CALL dr_hook('ASSIM_SURF_ATM_N',0,zhook_handle)
117 !
118  cprogname = hprogram
119 !
120 IF (htest/='OK') THEN
121  CALL abor1_sfx('ASSIM_SURF_ATMN: FATAL ERROR DURING ARGUMENT TRANSFER')
122 END IF
123 !
124 !-------------------------------------------------------------------------------------
125 ! Preliminaries: Tile related operations
126 !-------------------------------------------------------------------------------------
127 
128 ! FLAGS for the various surfaces:
129 !
130 gsea = u%NDIM_SEA >0
131 gwater = u%NDIM_WATER >0
132 gtown = u%NDIM_TOWN >0
133 gnature = u%NDIM_NATURE >0
134 !
135 ! Tile counter:
136 !
137 jtile = 0
138 !
139 !--------------------------------------------------------------------------------------
140 ! Call interfaces for sea, water, nature and town here...
141 !--------------------------------------------------------------------------------------
142 !
143 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
144 ! SEA Tile calculations:
145 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
146 !
147 jtile = jtile + 1
148 !
149 IF(gsea)THEN
150 !
151  CALL assim_treat_surf(jtile,u%NSIZE_SEA,u%NR_SEA)
152 !
153 ENDIF
154 !
155 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
156 ! INLAND WATER Tile calculations:
157 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
158 !
159 jtile = jtile + 1
160 !
161 IF(gwater)THEN
162 !
163  CALL assim_treat_surf(jtile,u%NSIZE_WATER,u%NR_WATER)
164 !
165 ENDIF
166 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
167 ! NATURAL SURFACE Tile calculations:
168 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
169 !
170 jtile = jtile + 1
171 !
172 IF(gnature)THEN
173 !
174  CALL assim_treat_surf(jtile,u%NSIZE_NATURE,u%NR_NATURE)
175 
176  IF ( ALLOCATED(xat2m_isba)) DEALLOCATE(xat2m_isba)
177  IF ( ALLOCATED(xahu2m_isba)) DEALLOCATE(xahu2m_isba)
178  IF ( ALLOCATED(xazon10m_isba)) DEALLOCATE(xazon10m_isba)
179  IF ( ALLOCATED(xamer10m_isba)) DEALLOCATE(xamer10m_isba)
180 !
181 ENDIF
182 !
183 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
184 ! URBAN Tile calculations:
185 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
186 !
187 jtile = jtile + 1
188 !
189 IF(gtown)THEN
190 !
191  CALL assim_treat_surf(jtile,u%NSIZE_TOWN,u%NR_TOWN)
192 
193  IF ( ALLOCATED(xat2m_teb)) DEALLOCATE(xat2m_teb)
194 !
195 ENDIF
196 !
197 IF (lhook) CALL dr_hook('ASSIM_SURF_ATM_N',1,zhook_handle)
198 !
199 !=======================================================================================
200  CONTAINS
201 !
202 !=======================================================================================
203 SUBROUTINE assim_treat_surf(KTILE,KSIZE,KMASK)
204 !
205 IMPLICIT NONE
206 !
207 INTEGER, INTENT(IN) :: ktile
208 INTEGER, INTENT(IN) :: ksize
209 INTEGER, INTENT(IN), DIMENSION(KSIZE) :: kmask
210 !
211 REAL,DIMENSION(KSIZE) :: zp_pcon_rain
212 REAL,DIMENSION(KSIZE) :: zp_pstrat_rain
213 REAL,DIMENSION(KSIZE) :: zp_pcon_snow
214 REAL,DIMENSION(KSIZE) :: zp_pstrat_snow
215 REAL,DIMENSION(KSIZE) :: zp_pclouds
216 REAL,DIMENSION(KSIZE) :: zp_plsm
217 REAL,DIMENSION(KSIZE) :: zp_pevaptr
218 REAL,DIMENSION(KSIZE) :: zp_pevap
219 REAL,DIMENSION(KSIZE) :: zp_pswec
220 REAL,DIMENSION(KSIZE) :: zp_ptsc
221 REAL,DIMENSION(KSIZE) :: zp_pts
222 REAL,DIMENSION(KSIZE) :: zp_pt2m
223 REAL,DIMENSION(KSIZE) :: zp_phu2m
224 REAL,DIMENSION(KSIZE) :: zp_pswe
225 REAL,DIMENSION(KSIZE) :: zp_psst
226 REAL,DIMENSION(KSIZE) :: zp_psic
227 REAL,DIMENSION(KSIZE) :: zp_ucls
228 REAL,DIMENSION(KSIZE) :: zp_vcls
229 REAL,DIMENSION(KSIZE) :: zp_lon
230 REAL,DIMENSION(KSIZE) :: zp_lat
231 LOGICAL,DIMENSION(KSIZE) :: gd_maskext
232 INTEGER :: jj,ji
233 !
234 DO jj=1,ksize
235  ji=kmask(jj)
236  zp_plsm(jj) = plsm(ji)
237  zp_pcon_rain(jj) = pcon_rain(ji)
238  zp_pstrat_rain(jj) = pstrat_rain(ji)
239  zp_pcon_snow(jj) = pcon_snow(ji)
240  zp_pstrat_snow(jj) = pstrat_snow(ji)
241  zp_pclouds(jj) = pclouds(ji)
242  zp_pevaptr(jj) = pevaptr(ji)
243  zp_pevap(jj) = pevap(ji)
244  zp_pswe(jj) = pswe(ji)
245  zp_pswec(jj) = pswec(ji)
246  zp_ptsc(jj) = ptsc(ji)
247  zp_pts(jj) = pts(ji)
248  zp_pt2m(jj) = pt2m(ji)
249  zp_phu2m(jj) = phu2m(ji)
250  zp_psst(jj) = psst(ji)
251  zp_psic(jj) = psic(ji)
252  zp_ucls(jj) = pucls(ji)
253  zp_vcls(jj) = pvcls(ji)
254  zp_lon(jj) = plon(ji)
255  zp_lat(jj) = plat(ji)
256  gd_maskext(jj) = od_maskext(ji)
257 ENDDO
258 
259 IF (ktile==1) THEN
260 
261  IF (nrank==npio) THEN
262  WRITE(*,*) '*********************************************'
263  WRITE(*,*) '* ASSIMILATIONS FOR SEA POINTS *'
264  WRITE(*,*) '*********************************************'
265  ENDIF
266 
267  CALL assim_sea_n(s, u, &
268  hprogram,ksize,zp_pts,zp_psst,zp_psic,zp_plsm,htest,&
269  olkeepextzone,gd_maskext,zp_lon,zp_lat)
270 
271 ELSEIF (ktile==2) THEN
272 
273  IF (nrank==npio) THEN
274  WRITE(*,*) '*********************************************'
275  WRITE(*,*) '* ASSIMILATIONS FOR WATER POINTS *'
276  WRITE(*,*) '*********************************************'
277  ENDIF
278 
279  CALL assim_inland_water_n(i, u, w, &
280  hprogram,ksize,zp_pts,zp_plsm,htest,&
281  olkeepextzone,gd_maskext,zp_lon,zp_lat)
282 
283 ELSEIF (ktile==3) THEN
284 
285  IF (nrank==npio) THEN
286  WRITE(*,*) '*********************************************'
287  WRITE(*,*) '* ASSIMILATIONS FOR NATURE POINTS *'
288  WRITE(*,*) '*********************************************'
289  ENDIF
290 
291  CALL assim_nature_n(dgmi, ig, i, u, &
292  hprogram,ksize, &
293  zp_pcon_rain, zp_pstrat_rain, zp_pcon_snow, zp_pstrat_snow, &
294  zp_pclouds, zp_plsm, zp_pevaptr, zp_pevap, &
295  zp_pswec, zp_ptsc, zp_ucls, zp_vcls, &
296  zp_pts, zp_pt2m, zp_phu2m, zp_pswe, &
297  htest, gd_maskext, zp_lon, zp_lat )
298 
299 ELSEIF (ktile==4) THEN
300 
301  IF (nrank==npio) THEN
302  WRITE(*,*) '*********************************************'
303  WRITE(*,*) '* ASSIMILATIONS FOR URBAN POINTS *'
304  WRITE(*,*) '*********************************************'
305  ENDIF
306 
307  CALL assim_town_n(u, t, top, &
308  hprogram,ksize,zp_pt2m,htest)
309 
310 ENDIF
311 
312 END SUBROUTINE assim_treat_surf
313 !=======================================================================================
314 END SUBROUTINE assim_surf_atm_n
315 !=======================================================================================
316 
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine assim_treat_surf(KTILE, KSIZE, KMASK)
subroutine assim_town_n(U, T, TOP, HPROGRAM, KI, PT2M_O, HTEST)
Definition: assim_townn.F90:6
subroutine assim_surf_atm_n(DGMI, IG, I, S, U, T, TOP, W, HPROGRAM, KI, PCON_RAIN, PSTRAT_RAIN, PCON_SNOW, PSTRAT_SNOW, PCLOUDS, PLSM, PEVAPTR, PEVAP, PSWEC, PTSC, PTS, PT2M, PHU2M, PSWE, PSST, PSIC, PUCLS, PVCLS, HTEST, OD_MASKEXT, PLON, PLAT, OLKEEPEXTZONE)
subroutine assim_sea_n(S, U, HPROGRAM, KI, PTS_IN, PSST_IN, PSIC_IN, PITM, HTEST, OLKEEPEXTZONE, OD_MASKEXT, PLON_IN, PLAT_IN)
Definition: assim_sean.F90:6
subroutine assim_nature_n(DGMI, IG, I, U, HPROGRAM, KI, PCON_RAIN, PSTRAT_RAIN, PCON_SNOW, PSTRAT_SNOW, PCLOUDS, PLSM, PEVAPTR, PEVAP, PSWEC, PTSC, PUCLS, PVCLS, PTS, PT2M, PHU2M, PSWE, HTEST, OD_MASKEXT, PLON, PLAT)
subroutine assim_inland_water_n(I, U, W, HPROGRAM, KI, PTS_IN, PITM, HTEST, OLKEEPEXTZONE, OD_MASKEXT, PLON_IN, PLAT_IN)