SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
put_sfx_land.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 put_sfx_land (I, U, &
7  kluout,ocpl_wtd,ocpl_flood, &
8  pwtd,pfwtd,pfflood,ppiflood )
9 ! #####################################################
10 !
11 !!**** *PUT_SFX_LAND* - routine to put some land surface variables to surfex
12 !! PURPOSE
13 !! -------
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !!
29 !! AUTHOR
30 !! ------
31 !! B. Decharme *Meteo France*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 08/2009
36 !!
37 !! B. Decharme 01/16 : Bug with flood budget
38 !-------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
43 USE modd_isba_n, ONLY : isba_t
44 USE modd_surf_atm_n, ONLY : surf_atm_t
45 !
46 USE modd_surf_par, ONLY : xundef
47 !
49 !
50 USE yomhook ,ONLY : lhook, dr_hook
51 USE parkind1 ,ONLY : jprb
52 !
53 IMPLICIT NONE
54 !
55 !* 0.1 Declarations of arguments
56 ! -------------------------
57 !
58 !
59 TYPE(isba_t), INTENT(INOUT) :: i
60 TYPE(surf_atm_t), INTENT(INOUT) :: u
61 !
62 INTEGER, INTENT(IN) :: kluout
63 LOGICAL, INTENT(IN) :: ocpl_wtd
64 LOGICAL, INTENT(IN) :: ocpl_flood
65 !
66 REAL, DIMENSION(:), INTENT(IN) :: pwtd ! water table depth (negative below soil surface) (m)
67 REAL, DIMENSION(:), INTENT(IN) :: pfwtd ! fraction of water table rise (-)
68 REAL, DIMENSION(:), INTENT(IN) :: pfflood ! fraction of flooded area (-)
69 REAL, DIMENSION(:), INTENT(IN) :: ppiflood ! Potential floodplain infiltration (kg/m2)
70 !
71 !* 0.2 Declarations of local variables
72 ! -------------------------------
73 !
74  CHARACTER(LEN=50) :: ycomment
75 !
76 REAL(KIND=JPRB) :: zhook_handle
77 !
78 !-------------------------------------------------------------------------------
79 !
80 IF (lhook) CALL dr_hook('PUT_SFX_LAND',0,zhook_handle)
81 !
82 !* 1.0 Initialization
83 ! --------------
84 !
85 IF(u%NSIZE_NATURE==0)THEN
86  IF (lhook) CALL dr_hook('PUT_SFX_LAND',1,zhook_handle)
87  RETURN
88 ENDIF
89 !
90 !* 2.0 Put variable over nature
91 ! ------------------------
92 !
93 IF(ocpl_wtd)THEN
94 !
95  i%XWTD (:) = xundef
96  i%XFWTD (:) = xundef
97 !
98  ycomment='water table depth'
99  CALL pack_same_rank(u%NR_NATURE(:),pwtd(:),i%XWTD(:))
100  CALL check_land(ycomment,i%XWTD)
101 !
102  ycomment='fraction of water table rise'
103  CALL pack_same_rank(u%NR_NATURE(:),pfwtd(:),i%XFWTD(:))
104  CALL check_land(ycomment,i%XFWTD)
105 !
106  WHERE(i%XGW(:)==0.0)
107  i%XWTD (:) = xundef
108  i%XFWTD (:) = 0.0
109  ENDWHERE
110 !
111 ENDIF
112 !
113 IF(ocpl_flood)THEN
114 !
115  i%XFFLOOD (:) = xundef
116  i%XPIFLOOD(:) = xundef
117 !
118  ycomment='Flood fraction'
119  CALL pack_same_rank(u%NR_NATURE(:),pfflood(:),i%XFFLOOD(:))
120  CALL check_land(ycomment,i%XFFLOOD)
121 !
122  ycomment='Potential flood infiltration'
123  CALL pack_same_rank(u%NR_NATURE(:),ppiflood(:),i%XPIFLOOD(:))
124  CALL check_land(ycomment,i%XPIFLOOD)
125 !
126 ENDIF
127 !
128 IF (lhook) CALL dr_hook('PUT_SFX_LAND',1,zhook_handle)
129 !
130 !-------------------------------------------------------------------------------
131  CONTAINS
132 !-------------------------------------------------------------------------------
133 !
134 SUBROUTINE check_land(HCOMMENT,PFIELD)
135 !
136 USE modi_abor1_sfx
137 !
138 IMPLICIT NONE
139 !
140  CHARACTER(LEN=*), INTENT(IN) :: hcomment
141 REAL, DIMENSION(:), INTENT(IN) :: pfield
142 !
143 REAL(KIND=JPRB) :: zhook_handle
144 !
145 IF (lhook) CALL dr_hook('PUT_SFX_LAND:CHECK_LAND',0,zhook_handle)
146 !
147 IF(any(pfield(:)>=xundef))THEN
148  WRITE(kluout,*)'PUT_SFX_LAND: problem after get '//trim(hcomment)//' from OASIS'
149  WRITE(kluout,*)'PUT_SFX_LAND: some points not defined = ',count(pfield(:)>=xundef)
150  CALL abor1_sfx('PUT_SFX_LAND: problem after get '//trim(hcomment)//' from OASIS')
151 ENDIF
152 !
153 IF (lhook) CALL dr_hook('PUT_SFX_LAND:CHECK_LAND',1,zhook_handle)
154 !
155 END SUBROUTINE check_land
156 !
157 !-------------------------------------------------------------------------------
158 !
159 END SUBROUTINE put_sfx_land
subroutine put_sfx_land(I, U, KLUOUT, OCPL_WTD, OCPL_FLOOD, PWTD, PFWTD, PFFLOOD, PPIFLOOD)
Definition: put_sfx_land.F90:6
subroutine check_land(HCOMMENT, PFIELD)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6