SURFEX v8.1
General documentation of Surfex
topd_to_df.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 ! ##########################
7  SUBROUTINE topd_to_df (IO, NK, NP, NPE, PWG)
8 ! ##########################
9 !
10 !!
11 !! PURPOSE
12 !! -------
13 ! This routines updates the soil water content of ISBA DIF afeter TOPODYN
14 ! lateral distribution
15 !
16 !!** METHOD
17 !! ------
18 !
19 !! EXTERNAL
20 !! --------
21 !!
22 !! none
23 !!
24 !! IMPLICIT ARGUMENTS
25 !! ------------------
26 !!
27 !! REFERENCE
28 !! ---------
29 !!
30 !! AUTHOR
31 !! ------
32 !!
33 !! ELYAZIDI/HEYMES/RISTOR * Meteo-France *
34 !!
35 !! MODIFICATIONS
36 !! -------------
37 !!
38 !! Original 02/2011
39 !-------------------------------------------------------------------------------
40 !
41 !* 0. DECLARATIONS
42 ! ------------
43 !
46 !
47 USE modd_surf_par, ONLY : xundef, nundef
49 USE modd_isba_par, ONLY : xwgmin
50 !
51 USE yomhook , ONLY : lhook, dr_hook
52 USE parkind1 , ONLY : jprb
53 !
54 IMPLICIT NONE
55 !
56 !* 0.1 declarations of arguments
57 !
58 TYPE(isba_options_t), INTENT(INOUT) :: IO
59 TYPE(isba_nk_t), INTENT(INOUT) :: NK
60 TYPE(isba_np_t), INTENT(INOUT) :: NP
61 TYPE(isba_npe_t), INTENT(INOUT) :: NPE
62 !
63  REAL, DIMENSION(:,:), INTENT(IN) :: PWG
64 !
65 !* 0.2 declarations of local variables
66 !
67 TYPE(isba_k_t), POINTER :: KK
68 TYPE(isba_p_t), POINTER :: PK
69 TYPE(isba_pe_t), POINTER :: PEK
70 REAL :: ZWORK ! numbers of layers in root and deep zones
71 INTEGER :: IDEPTH, IMASK
72 INTEGER :: JI, JL, JP ! loop indexes
73 REAL(KIND=JPRB) :: ZHOOK_HANDLE
74 !-------------------------------------------------------------------------------
75 !
76 IF (lhook) CALL dr_hook('TOPD_TO_DF',0,zhook_handle)
77 !
78 DO jp=1,io%NPATCH
79 
80  kk => nk%AL(jp)
81  pk => np%AL(jp)
82  pek => npe%AL(jp)
83 
84  IF (pk%NSIZE_P == 0 ) cycle
85 
86  DO jl = 1,io%NGROUND_LAYER
87 
88  DO ji=1,pk%NSIZE_P
89  imask = pk%NR_P(ji)
90 
91  idepth=pk%NWG_LAYER(ji)
92 
93  IF(jl<=idepth.AND.idepth/=nundef.AND.(xtotbv_in_mesh(imask)/=0.0).AND.(xtotbv_in_mesh(imask)/=xundef)) THEN
94 
95  ! root layers
96  IF (pk%XDZG(ji,jl)/=xundef.AND.pk%XDG2(ji)/=xundef.AND.pk%XDG(ji,jl)/=xundef) THEN
97  zwork=min(pk%XDZG(ji,jl),max(0.0,pk%XDG2(ji)-pk%XDG(ji,jl)+pk%XDZG(ji,jl)))
98  ENDIF
99 
100  IF ((pwg(imask,2)/=xundef).AND.(zwork>0.).AND.(zwork/=xundef)) THEN
101  pek%XWG(ji,jl)=min(max(pwg(imask,2),xwgmin),kk%XWSAT(ji,jl))
102  ENDIF
103 
104  ! deep layers
105  IF ((xfrac_d3(imask)/=0.0).AND.(xfrac_d3(imask)/=xundef)) THEN
106 
107  IF (pk%XDZG(ji,jl)/=xundef.AND.pk%XDG2(ji)/=xundef.AND.pk%XDG(ji,jl)/=xundef) THEN
108  zwork=min(pk%XDZG(ji,jl),max(0.0,pk%XDG(ji,jl)-pk%XDG2(ji)))
109  ENDIF
110 
111  IF ((pwg(imask,3)/=xundef).AND.(zwork>0.).AND.(zwork/=xundef)) THEN
112  pek%XWG(ji,jl)=min(max(pwg(imask,3),xwgmin),kk%XWSAT(ji,jl))
113  ENDIF
114 
115  ENDIF
116 
117  ENDIF
118 
119  ENDDO
120  ENDDO
121 ENDDO
122 !
123 IF (lhook) CALL dr_hook('TOPD_TO_DF',1,zhook_handle)
124 
125 END SUBROUTINE topd_to_df
126 
127 
real, parameter xundef
real, dimension(:), allocatable xtotbv_in_mesh
integer, parameter jprb
Definition: parkind1.F90:32
integer, parameter nundef
real, dimension(:), allocatable xfrac_d3
logical lhook
Definition: yomhook.F90:15
subroutine topd_to_df(IO, NK, NP, NPE, PWG)
Definition: topd_to_df.F90:8