SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
ini_var_from_data.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.
6 !
8 !
9 SUBROUTINE ini_var_from_data_1d (DTCO, DGU, UG, U, USS, DTI, &
10  hprogram, hatype, hname, htype, hfnam, hftyp, punif, pfield, opresent)
11 !
15 USE modd_surf_atm_n, ONLY : surf_atm_t
17 USE modd_data_isba_n, ONLY : data_isba_t
18 !
19 TYPE(data_cover_t), INTENT(INOUT) :: dtco
20 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
21 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
22 TYPE(surf_atm_t), INTENT(INOUT) :: u
23 TYPE(surf_atm_sso_t), INTENT(INOUT) :: uss
24 TYPE(data_isba_t), INTENT(INOUT) :: dti
25 !
26  CHARACTER(LEN=6), INTENT(IN) :: hprogram
27  CHARACTER(LEN=3), INTENT(IN) :: hatype
28  CHARACTER(LEN=*), INTENT(IN) :: hname
29  CHARACTER(LEN=3), INTENT(IN) :: htype
30  CHARACTER(LEN=28), DIMENSION(:), INTENT(IN) :: hfnam
31  CHARACTER(LEN=6), DIMENSION(:), INTENT(IN) :: hftyp
32 REAL, DIMENSION(:), INTENT(IN) :: punif
33 REAL, DIMENSION(:,:), INTENT(OUT) :: pfield
34 LOGICAL, INTENT(OUT) :: opresent
35 !
36 END SUBROUTINE ini_var_from_data_1d
37 !
38 !
39  SUBROUTINE ini_var_from_data_2d (DTCO, DGU, UG, U, USS, DTI, &
40  hprogram, hatype, hname, htype, hfnam, hftyp, punif, pfield_time, opresent)
41 !
45 USE modd_surf_atm_n, ONLY : surf_atm_t
47 USE modd_data_isba_n, ONLY : data_isba_t
48 !
49 !
50 TYPE(data_cover_t), INTENT(INOUT) :: dtco
51 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
52 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
53 TYPE(surf_atm_t), INTENT(INOUT) :: u
54 TYPE(surf_atm_sso_t), INTENT(INOUT) :: uss
55 TYPE(data_isba_t), INTENT(INOUT) :: dti
56 !
57  CHARACTER(LEN=6), INTENT(IN) :: hprogram
58  CHARACTER(LEN=3), INTENT(IN) :: hatype
59  CHARACTER(LEN=*), INTENT(IN) :: hname
60  CHARACTER(LEN=3), INTENT(IN) :: htype
61  CHARACTER(LEN=28), DIMENSION(:,:), INTENT(IN) :: hfnam
62  CHARACTER(LEN=6), DIMENSION(:,:), INTENT(IN) :: hftyp
63 REAL, DIMENSION(:,:), INTENT(IN) :: punif
64 REAL, DIMENSION(:,:,:), INTENT(OUT) :: pfield_time
65 LOGICAL, INTENT(OUT) :: opresent
66 !
67 END SUBROUTINE ini_var_from_data_2d
68 !
69 !
70 END INTERFACE ini_var_from_data
71 !
72 END MODULE modi_ini_var_from_data
73 !
74 !
75 ! #########
76  SUBROUTINE ini_var_from_data_1d (DTCO, DGU, UG, U, USS, DTI, &
77  hprogram, hatype, hname ,htype, hfnam, hftyp, punif, pfield, opresent)
78 ! ##############################################################
79 !
80 !!
81 !! PURPOSE
82 !! -------
83 !!
84 !! METHOD
85 !! ------
86 !!
87 !
88 !! EXTERNAL
89 !! --------
90 !!
91 !! IMPLICIT ARGUMENTS
92 !! ------------------
93 !!
94 !! REFERENCE
95 !! ---------
96 !!
97 !! AUTHOR
98 !! ------
99 !!
100 !! S. Faroux Meteo-France
101 !!
102 !! MODIFICATION
103 !! ------------
104 !!
105 !! Original 16/11/10
106 !!
107 !----------------------------------------------------------------------------
108 !
109 !* 0. DECLARATION
110 ! -----------
111 !
115 USE modd_surf_atm_n, ONLY : surf_atm_t
117 USE modd_data_isba_n, ONLY : data_isba_t
118 !
119 USE modd_data_cover_par, ONLY : nvegtype
120 !
121 USE modi_ini_var_from_data_0d
122 USE modi_abor1_sfx
123 !
124 USE yomhook ,ONLY : lhook, dr_hook
125 USE parkind1 ,ONLY : jprb
126 !
127 IMPLICIT NONE
128 !
129 !* 0.1 Declaration of arguments
130 ! ------------------------
131 !
132 TYPE(data_cover_t), INTENT(INOUT) :: dtco
133 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
134 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
135 TYPE(surf_atm_t), INTENT(INOUT) :: u
136 TYPE(surf_atm_sso_t), INTENT(INOUT) :: uss
137 TYPE(data_isba_t), INTENT(INOUT) :: dti
138 !
139  CHARACTER(LEN=6), INTENT(IN) :: hprogram
140  CHARACTER(LEN=3), INTENT(IN) :: hatype
141  CHARACTER(LEN=*), INTENT(IN) :: hname
142  CHARACTER(LEN=3), INTENT(IN) :: htype
143  CHARACTER(LEN=28), DIMENSION(:), INTENT(IN) :: hfnam
144  CHARACTER(LEN=6), DIMENSION(:), INTENT(IN) :: hftyp
145 REAL, DIMENSION(:), INTENT(IN) :: punif
146 REAL, DIMENSION(:,:), INTENT(OUT) :: pfield
147 LOGICAL, INTENT(OUT) :: opresent
148 !
149 !
150 !* 0.2 Declaration of local variables
151 ! ------------------------------
152 !
153  CHARACTER(LEN=40) :: yname
154 LOGICAL, DIMENSION(SIZE(PFIELD,2)) :: lpresent
155 INTEGER :: ji, jj ! loop counter on vegtypes
156 !
157 REAL(KIND=JPRB) :: zhook_handle
158 !
159 
160 !-------------------------------------------------------------------------------
161 !
162 !* 1. Initializations
163 ! ---------------
164 !
165 IF (lhook) &
166  CALL dr_hook('MODI_INI_VAR_FROM_DATA:INI_VAR_FROM_DATA_1D',0,zhook_handle)
167 !
168 opresent=.false.
169 yname=adjustl(hname)
170 !
171 DO ji=1,SIZE(pfield,2)
172  CALL ini_var_from_data_0d(dtco, dgu, ug, u, uss, &
173  hprogram, hatype, hname, htype, hfnam(ji), &
174  hftyp(ji), punif(ji), pfield(:,ji), lpresent(ji))
175 ENDDO
176 !
177 IF (any(lpresent(:))) THEN
178 
179  opresent=.true.
180 
181  IF (SIZE(pfield,2)==nvegtype .AND. yname(1:7).NE.'VEGTYPE') THEN
182 
183  !if a vegtype are missing, the last present gives it his values
184  DO ji=2,SIZE(pfield,2)
185  IF (.NOT.lpresent(ji)) THEN
186  DO jj=ji,1,-1
187  IF (lpresent(jj)) THEN
188  pfield(:,ji)=pfield(:,jj)
189  lpresent(ji)=.true.
190  EXIT
191  ENDIF
192  ENDDO
193  ENDIF
194  ENDDO
195 
196  DO ji=1,SIZE(pfield,2)
197  IF (lpresent(ji)) THEN
198  WHERE (dti%XPAR_VEGTYPE(:,ji).EQ.0.) pfield(:,ji)=0.0
199  ELSE
200  pfield(:,ji)=0.
201  ENDIF
202  ENDDO
203 
204  ELSEIF (.NOT.all(lpresent)) THEN
205  CALL abor1_sfx("INI_VAR_FROM_DATA_1D: MISSING INPUT DATA FOR "//hname)
206  ENDIF
207 ENDIF
208 !
209 IF (lhook) &
210  CALL dr_hook('MODI_INI_VAR_FROM_DATA:INI_VAR_FROM_DATA_1D',1,zhook_handle)
211 !
212 !-------------------------------------------------------------------------------
213 !
214 END SUBROUTINE ini_var_from_data_1d
215 !
216 ! #########
217  SUBROUTINE ini_var_from_data_2d (DTCO, DGU, UG, U, USS, DTI, &
218  hprogram, hatype, hname, htype, hfnam, hftyp, punif, pfield_time, opresent)
219 ! ##############################################################
220 !
221 !!
222 !! PURPOSE
223 !! -------
224 !!
225 !! METHOD
226 !! ------
227 !!
228 !
229 !! EXTERNAL
230 !! --------
231 !!
232 !! IMPLICIT ARGUMENTS
233 !! ------------------
234 !!
235 !! REFERENCE
236 !! ---------
237 !!
238 !! AUTHOR
239 !! ------
240 !!
241 !! S. Faroux Meteo-France
242 !!
243 !! MODIFICATION
244 !! ------------
245 !!
246 !! Original 16/11/10
247 !!
248 !----------------------------------------------------------------------------
249 !
250 !* 0. DECLARATION
251 ! -----------
252 !
256 USE modd_surf_atm_n, ONLY : surf_atm_t
258 USE modd_data_isba_n, ONLY : data_isba_t
259 !
260 USE modd_data_cover_par, ONLY : nvegtype
261 !
262 USE modi_ini_var_from_data_0d
263 USE modi_put_in_time
264 !
265 USE yomhook ,ONLY : lhook, dr_hook
266 USE parkind1 ,ONLY : jprb
267 !
268 USE modi_abor1_sfx
269 !
270 IMPLICIT NONE
271 !
272 !* 0.1 Declaration of arguments
273 ! ------------------------
274 !
275 TYPE(data_cover_t), INTENT(INOUT) :: dtco
276 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
277 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
278 TYPE(surf_atm_t), INTENT(INOUT) :: u
279 TYPE(surf_atm_sso_t), INTENT(INOUT) :: uss
280 TYPE(data_isba_t), INTENT(INOUT) :: dti
281 !
282  CHARACTER(LEN=6), INTENT(IN) :: hprogram
283  CHARACTER(LEN=3), INTENT(IN) :: hatype
284  CHARACTER(LEN=*), INTENT(IN) :: hname
285  CHARACTER(LEN=3), INTENT(IN) :: htype
286  CHARACTER(LEN=28), DIMENSION(:,:), INTENT(IN) :: hfnam
287  CHARACTER(LEN=6), DIMENSION(:,:), INTENT(IN) :: hftyp
288 REAL, DIMENSION(:,:), INTENT(IN) :: punif
289 REAL, DIMENSION(:,:,:), INTENT(OUT) :: pfield_time
290 LOGICAL, INTENT(OUT) :: opresent
291 !
292 !
293 !* 0.2 Declaration of local variables
294 ! ------------------------------
295 !
296 LOGICAL, DIMENSION(SIZE(PFIELD_TIME,3)) :: lpresent
297 LOGICAL, DIMENSION(SIZE(PFIELD_TIME,2)) :: lpresent_time
298 INTEGER :: ji, jj ! loop counter on vegtypes
299 INTEGER :: jtime
300 INTEGER :: itime
301 !
302 REAL(KIND=JPRB) :: zhook_handle
303 !
304 
305 !-------------------------------------------------------------------------------
306 !
307 !* 1. Initializations
308 ! ---------------
309 !
310 IF (lhook) &
311  CALL dr_hook('MODI_INI_VAR_FROM_DATA:INI_VAR_FROM_DATA_2D',0,zhook_handle)
312 !
313 opresent=.false.
314 lpresent_time(:)=.false.
315 itime=0
316 !
317 DO jtime=1,SIZE(pfield_time,2)
318 
319  DO ji=1,SIZE(pfield_time,3)
320 
321  CALL ini_var_from_data_0d(dtco, dgu, ug, u, uss, &
322  hprogram, hatype, hname, htype, hfnam(ji,jtime), &
323  hftyp(ji,jtime), punif(ji,jtime), pfield_time(:,jtime,ji),&
324  lpresent(ji))
325 
326  ENDDO
327 
328  IF (any(lpresent(:))) THEN
329 
330  lpresent_time(jtime)=.true.
331  opresent=.true.
332  itime=itime+1
333 
334  IF (SIZE(pfield_time,3)==nvegtype) THEN
335 
336  DO ji=2,SIZE(pfield_time,3)
337  IF (.NOT.lpresent(ji)) THEN
338  DO jj=ji,1,-1
339  IF (lpresent(jj)) THEN
340  pfield_time(:,jtime,ji)=pfield_time(:,jtime,jj)
341  lpresent(ji)=.true.
342  EXIT
343  ENDIF
344  ENDDO
345  ENDIF
346  ENDDO
347  DO ji=1,SIZE(pfield_time,3)
348  IF (lpresent(ji)) THEN
349  WHERE (dti%XPAR_VEGTYPE(:,ji).EQ.0.) pfield_time(:,jtime,ji)=0.0
350  ELSE
351  pfield_time(:,jtime,ji)=0.
352  ENDIF
353  ENDDO
354 
355  ELSEIF (.NOT.all(lpresent)) THEN
356  CALL abor1_sfx("INI_VAR_FROM_DATA_1D: MISSING INPUT DATA FOR "//hname)
357  ENDIF
358 
359  ENDIF
360 
361 ENDDO
362 !
363 IF (opresent) THEN
364  IF (SIZE(pfield_time,2)==36) THEN
365  CALL put_in_time(hname,htype,itime,36,pfield_time)
366  ELSE
367  IF (any(lpresent_time(:)) .AND. .NOT.all(lpresent_time(:))) &
368  CALL abor1_sfx("INI_VAR_FROM_DATA_2D: MISSING INPUT DATA FOR "//hname)
369  ENDIF
370 ENDIF
371 !
372 !
373 IF (lhook) &
374  CALL dr_hook('MODI_INI_VAR_FROM_DATA:INI_VAR_FROM_DATA_2D',1,zhook_handle)
375 !
376 !-------------------------------------------------------------------------------
377 !
378 END SUBROUTINE ini_var_from_data_2d
subroutine ini_var_from_data_1d(DTCO, DGU, UG, U, USS, DTI, HPROGRAM, HATYPE, HNAME, HTYPE, HFNAM, HFTYP, PUNIF, PFIELD, OPRESENT)
subroutine ini_var_from_data_2d(DTCO, DGU, UG, U, USS, DTI, HPROGRAM, HATYPE, HNAME, HTYPE, HFNAM, HFTYP, PUNIF, PFIELD_TIME, OPRESENT)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine put_in_time(HNAME, HTYPE, NTIME1, NTIME2, PDATA)
Definition: put_in_time.F90:5
subroutine ini_var_from_data_0d(DTCO, DGU, UG, U, USS, HPROGRAM, HATYPE, HNAME, HTYPE, HFNAM, HFTYP, PUNIF, PFIELD, OPRESENT)