SURFEX v8.1
General documentation of Surfex
dg_dfto3l.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 dg_dfto3l (IO, NP, PDG)
8 ! ##########################
9 !
10 !!
11 !! PURPOSE
12 !! -------
13 ! from AVERAGE_DIAG_MISC_ISBA_n
14 !
15 !!** METHOD
16 !! ------
17 !
18 !! EXTERNAL
19 !! --------
20 !!
21 !! none
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !! AUTHOR
30 !! ------
31 !!
32 !! ELYAZIDI/HEYMES/RISTOR * Meteo-France *
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !!
37 !! Original 02/2011
38 !-------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
44 USE modd_isba_n, ONLY : isba_np_t, isba_p_t
45 !
46 USE modd_surf_par, ONLY : xundef, nundef
47 USE yomhook , ONLY : lhook, dr_hook
48 USE parkind1 , ONLY : jprb
49 !
50 !
51 IMPLICIT NONE
52 !
53 !* 0.1 declarations of arguments
54 !
55 TYPE(isba_options_t), INTENT(INOUT) :: IO
56 TYPE(isba_np_t), INTENT(INOUT) :: NP
57 !
58  REAL, DIMENSION(:,:), INTENT(OUT) :: PDG
59 !
60 !* 0.2 declarations of local variables
61 TYPE(isba_p_t), POINTER :: PK
62  INTEGER :: JI, JL ! loop indexes
63  INTEGER :: IDEPTH
64  INTEGER :: IMASK, JP
65  REAL :: ZWORK
66  !
67  REAL(KIND=JPRB) :: ZHOOK_HANDLE
68 !-------------------------------------------------------------------------------
69 IF (lhook) CALL dr_hook('DG_DFTO3L',0,zhook_handle)
70 !
71 pdg(:,:)=0.0
72 !
73 DO jp=1,io%NPATCH
74  !
75  pk => np%AL(jp)
76  !
77  IF (pk%NSIZE_P == 0 ) cycle
78  !
79  DO jl = 1,io%NGROUND_LAYER
80  !
81  DO ji=1,pk%NSIZE_P
82  !
83  imask = pk%NR_P(ji)
84  !
85  idepth=pk%NWG_LAYER(ji)
86  !
87  IF(jl<=idepth.AND.idepth/=nundef.AND.pk%XPATCH(ji)/=xundef)THEN
88  !
89  pdg(imask,1) = pdg(imask,1) + pk%XDG(ji,1) * pk%XPATCH(ji)
90  ! ISBA-FR-DG2 comparable soil wetness index, liquid water and ice contents
91  zwork = min(pk%XDZG(ji,jl),max(0.0,pk%XDG2(ji)-pk%XDG(ji,jl)+pk%XDZG(ji,jl)))
92  pdg(imask,2) = pdg(imask,2) + zwork * pk%XPATCH(ji)
93  !
94  ! ISBA-FR-DG3 comparable soil wetness index, liquid water and ice contents
95  zwork=min(pk%XDZG(ji,jl),max(0.0,pk%XDG(ji,jl)-pk%XDG2(ji)))
96  pdg(imask,3) = pdg(imask,3) + zwork * pk%XPATCH(ji)
97  !
98  ENDIF
99  ENDDO
100  ENDDO
101  !
102 ENDDO
103 !
104 pdg(:,3) = pdg(:,2) + pdg(:,3)
105 WHERE (pdg(:,:)==0.0)
106  pdg(:,:)=xundef
107 ENDWHERE
108 !
109 IF (lhook) CALL dr_hook('DG_DFTO3L',1,zhook_handle)
110 
111 END SUBROUTINE dg_dfto3l
112 
113 
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
subroutine dg_dfto3l(IO, NP, PDG)
Definition: dg_dfto3l.F90:8
integer, parameter nundef
logical lhook
Definition: yomhook.F90:15