SURFEX v8.1
General documentation of Surfex
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 (IO, S, K, NK, NP, 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 !! B. Decharme 01/16 : Bug with flood budget
37 !! 10/2016 B. Decharme : bug surface/groundwater coupling
38 !-------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
45 USE modd_surf_atm_n, ONLY : surf_atm_t
46 !
47 USE modd_surf_par, ONLY : xundef
48 USE modn_sfx_oasis, ONLY : xflood_lim
49 !
51 !
52 USE yomhook ,ONLY : lhook, dr_hook
53 USE parkind1 ,ONLY : jprb
54 !
55 IMPLICIT NONE
56 !
57 !* 0.1 Declarations of arguments
58 ! -------------------------
59 !
60 TYPE(isba_options_t), INTENT(INOUT) :: IO
61 TYPE(isba_s_t), INTENT(INOUT) :: S
62 TYPE(isba_k_t), INTENT(INOUT) :: K
63 TYPE(isba_nk_t), INTENT(INOUT) :: NK
64 TYPE(isba_np_t), INTENT(INOUT) :: NP
65 TYPE(surf_atm_t), INTENT(INOUT) :: U
66 !
67 INTEGER, INTENT(IN) :: KLUOUT
68 LOGICAL, INTENT(IN) :: OCPL_WTD
69 LOGICAL, INTENT(IN) :: OCPL_FLOOD
70 !
71 REAL, DIMENSION(:), INTENT(IN) :: PWTD ! water table depth (negative below soil surface) (m)
72 REAL, DIMENSION(:), INTENT(IN) :: PFWTD ! fraction of water table rise (-)
73 REAL, DIMENSION(:), INTENT(IN) :: PFFLOOD ! fraction of flooded area (-)
74 REAL, DIMENSION(:), INTENT(IN) :: PPIFLOOD ! Potential floodplain infiltration (kg/m2)
75 !
76 !* 0.2 Declarations of local variables
77 ! -------------------------------
78 !
79 TYPE(isba_p_t), POINTER :: PK
80 TYPE(isba_k_t), POINTER :: KK
81 !
82 INTEGER :: JP
83  CHARACTER(LEN=50) :: YCOMMENT
84 !
85 REAL(KIND=JPRB) :: ZHOOK_HANDLE
86 !
87 !-------------------------------------------------------------------------------
88 !
89 IF (lhook) CALL dr_hook('PUT_SFX_LAND',0,zhook_handle)
90 !
91 !* 1.0 Initialization
92 ! --------------
93 !
94 IF(u%NSIZE_NATURE==0)THEN
95  IF (lhook) CALL dr_hook('PUT_SFX_LAND',1,zhook_handle)
96  RETURN
97 ENDIF
98 !
99 !* 2.0 Put variable over nature
100 ! ------------------------
101 !
102 IF(ocpl_wtd)THEN
103 !
104  k%XWTD (:) = xundef
105  k%XFWTD (:) = xundef
106 !
107  ycomment='water table depth'
108  CALL pack_same_rank(u%NR_NATURE(:),pwtd(:),k%XWTD(:))
109  CALL check_land(ycomment,k%XWTD)
110 !
111  ycomment='fraction of water table rise'
112  CALL pack_same_rank(u%NR_NATURE(:),pfwtd(:),k%XFWTD(:))
113  CALL check_land(ycomment,k%XFWTD)
114 !
115  WHERE(k%XFWTD(:)==0.0)
116  k%XWTD (:) = xundef
117  ENDWHERE
118 !
119  DO jp = 1,io%NPATCH
120  pk => np%AL(jp)
121  kk => nk%AL(jp)
122  CALL pack_same_rank(pk%NR_P,k%XWTD,kk%XWTD)
123  CALL pack_same_rank(pk%NR_P,k%XFWTD,kk%XFWTD)
124  ENDDO
125 !
126 ENDIF
127 !
128 IF(ocpl_flood)THEN
129 !
130  k%XFFLOOD (:) = xundef
131  k%XPIFLOOD(:) = xundef
132 !
133  ycomment='Flood fraction'
134  CALL pack_same_rank(u%NR_NATURE(:),pfflood(:),k%XFFLOOD(:))
135  CALL check_land(ycomment,k%XFFLOOD)
136 !
137  ycomment='Potential flood infiltration'
138  CALL pack_same_rank(u%NR_NATURE(:),ppiflood(:),k%XPIFLOOD(:))
139  CALL check_land(ycomment,k%XPIFLOOD)
140 !
141 ! No flood for very smal flooded area (default 1%)
142 !
143  WHERE(k%XFFLOOD (:)<xflood_lim)
144  k%XFFLOOD (:)=0.0
145  k%XPIFLOOD(:)=0.0
146  ENDWHERE
147 !
148  DO jp = 1,io%NPATCH
149  pk => np%AL(jp)
150  kk => nk%AL(jp)
151  CALL pack_same_rank(pk%NR_P,k%XFFLOOD,kk%XFFLOOD)
152  CALL pack_same_rank(pk%NR_P,k%XPIFLOOD,kk%XPIFLOOD)
153  ENDDO
154 !
155 ENDIF
156 !
157 IF (lhook) CALL dr_hook('PUT_SFX_LAND',1,zhook_handle)
158 !
159 !-------------------------------------------------------------------------------
160 CONTAINS
161 !-------------------------------------------------------------------------------
162 !
163 SUBROUTINE check_land(HCOMMENT,PFIELD)
164 !
165 USE modi_abor1_sfx
166 !
167 IMPLICIT NONE
168 !
169  CHARACTER(LEN=*), INTENT(IN) :: HCOMMENT
170 REAL, DIMENSION(:), INTENT(IN) :: PFIELD
171 !
172 REAL(KIND=JPRB) :: ZHOOK_HANDLE
173 !
174 IF (lhook) CALL dr_hook('PUT_SFX_LAND:CHECK_LAND',0,zhook_handle)
175 !
176 IF(any(pfield(:)>=xundef))THEN
177  WRITE(kluout,*)'PUT_SFX_LAND: problem after get '//trim(hcomment)//' from OASIS'
178  WRITE(kluout,*)'PUT_SFX_LAND: some points not defined = ',count(pfield(:)>=xundef)
179  CALL abor1_sfx('PUT_SFX_LAND: problem after get '//trim(hcomment)//' from OASIS')
180 ENDIF
181 !
182 IF (lhook) CALL dr_hook('PUT_SFX_LAND:CHECK_LAND',1,zhook_handle)
183 !
184 END SUBROUTINE check_land
185 !
186 !-------------------------------------------------------------------------------
187 !
188 END SUBROUTINE put_sfx_land
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
subroutine check_land(HCOMMENT, PFIELD)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
subroutine put_sfx_land(IO, S, K, NK, NP, U, KLUOUT, OCPL_WTD, OCPL_FLOOD, PWTD, PFWTD, PFFLOOD, PPIFLOOD)
Definition: put_sfx_land.F90:9
logical lhook
Definition: yomhook.F90:15
static int count
Definition: memory_hook.c:21