SURFEX v8.1
General documentation of Surfex
get_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 get_sfx_land (IO, S, U, &
7  OCPL_GW,OCPL_FLOOD,OCPL_CALVING, &
8  PRUNOFF,PDRAIN,PCALVING,PSRCFLOOD )
9 ! ###############################################################################
10 !
11 !!**** *GET_SFX_LAND* - routine to get some land surface variables from 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 10/2013
36 !! 10/2016 B. Decharme : bug surface/groundwater coupling
37 !-------------------------------------------------------------------------------
38 !
39 !* 0. DECLARATIONS
40 ! ------------
41 !
43 USE modd_isba_n, ONLY : isba_s_t
44 USE modd_surf_atm_n, ONLY : surf_atm_t
45 !
46 USE modd_surf_par, ONLY : xundef
47 !
48 !
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(surf_atm_t), INTENT(INOUT) :: U
63 !
64 LOGICAL, INTENT(IN) :: OCPL_GW ! groundwater/surface key
65 LOGICAL, INTENT(IN) :: OCPL_FLOOD ! flood key
66 LOGICAL, INTENT(IN) :: OCPL_CALVING ! calving key
67 !
68 REAL, DIMENSION(:), INTENT(OUT) :: PRUNOFF ! Cumulated Surface runoff (kg/m2)
69 REAL, DIMENSION(:), INTENT(OUT) :: PDRAIN ! Cumulated Deep drainage (kg/m2)
70 REAL, DIMENSION(:), INTENT(OUT) :: PCALVING ! Cumulated Calving flux (kg/m2)
71 REAL, DIMENSION(:), INTENT(OUT) :: PSRCFLOOD ! Cumulated freshwater flux (kg/m2)
72 !
73 !* 0.2 Declarations of local variables
74 ! -------------------------------
75 !
76 REAL, DIMENSION(SIZE(S%XCPL_PFLOOD)) :: ZSRCFLOOD
77 !
78 REAL, DIMENSION(SIZE(PCALVING)) :: ZCALVING
79 !
80 REAL(KIND=JPRB) :: ZHOOK_HANDLE
81 !
82 !-------------------------------------------------------------------------------
83 IF (lhook) CALL dr_hook('GET_SFX_LAND',0,zhook_handle)
84 !-------------------------------------------------------------------------------
85 !
86 !* 1.0 Initialization
87 ! --------------
88 !
89 prunoff(:) = xundef
90 pdrain(:) = xundef
91 pcalving(:) = xundef
92 psrcflood(:) = xundef
93 !
94 !* 2.0 Get variable over nature
95 ! ------------------------
96 !
97 IF(u%NSIZE_NATURE>0)THEN
98 !
99 ! * surface runoff
100 !
101  CALL unpack_same_rank(u%NR_NATURE,s%XCPL_RUNOFF(:),prunoff(:),xundef)
102  s%XCPL_RUNOFF (:) = 0.0
103 !
104 ! * deep drainage
105 !
106  CALL unpack_same_rank(u%NR_NATURE,s%XCPL_DRAIN(:),pdrain(:),xundef)
107  s%XCPL_DRAIN(:) = 0.0
108 !
109 ! * Calving flux
110 !
111  IF(ocpl_calving)THEN
112  CALL unpack_same_rank(u%NR_NATURE,s%XCPL_ICEFLUX(:),pcalving(:),xundef)
113  s%XCPL_ICEFLUX(:) = 0.0
114  ELSEIF(io%LGLACIER)THEN
115  s%XCPL_DRAIN (:) = s%XCPL_DRAIN(:) + s%XCPL_ICEFLUX(:)
116  s%XCPL_ICEFLUX(:) = 0.0
117  ENDIF
118 !
119 ! * floodplain source terms
120 !
121  IF(ocpl_flood)THEN
122  zsrcflood(:) = s%XCPL_PFLOOD(:)-s%XCPL_EFLOOD(:)-s%XCPL_IFLOOD(:)
123  s%XCPL_PFLOOD(:) = 0.0
124  s%XCPL_EFLOOD(:) = 0.0
125  s%XCPL_IFLOOD(:) = 0.0
126  CALL unpack_same_rank(u%NR_NATURE,zsrcflood(:),psrcflood(:),xundef)
127  ENDIF
128 !
129 ENDIF
130 !
131 !-------------------------------------------------------------------------------
132 IF (lhook) CALL dr_hook('GET_SFX_LAND',1,zhook_handle)
133 !-------------------------------------------------------------------------------
134 !
135 END SUBROUTINE get_sfx_land
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
subroutine get_sfx_land(IO, S, U, OCPL_GW, OCPL_FLOOD, OCPL_CALVING, PRUNOFF, PDRAIN, PCALVING, PSRCFLOOD)
Definition: get_sfx_land.F90:9
logical lhook
Definition: yomhook.F90:15