SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
avg_patch_wg.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 avg_patch_wg (I, &
8  ki,pwg,pwgi,pdg)
9 ! ##########################
10 !
11 !!
12 !! PURPOSE
13 !! -------
14 ! from AVERAGE_DIAG_MISC_ISBA_n
15 !! ONLY for 3L cases!!
16 !
17 !!** METHOD
18 !! ------
19 !
20 !! EXTERNAL
21 !! --------
22 !!
23 !! none
24 !!
25 !! IMPLICIT ARGUMENTS
26 !! ------------------
27 !!
28 !! REFERENCE
29 !! ---------
30 !!
31 !! AUTHOR
32 !! ------
33 !!
34 !! ELYAZIDI/HEYMES/RISTOR * Meteo-France *
35 !!
36 !! MODIFICATIONS
37 !! -------------
38 !!
39 !! Original 02/2011
40 !-------------------------------------------------------------------------------
41 !
42 !* 0. DECLARATIONS
43 ! ------------
44 !
45 !
46 !
47 USE modd_isba_n, ONLY : isba_t
48 !
49 USE modd_surf_par, ONLY : xundef, nundef
50 USE yomhook , ONLY : lhook, dr_hook
51 USE parkind1 , ONLY : jprb
52 !
53 !
54 IMPLICIT NONE
55 !
56 !* 0.1 declarations of arguments
57 
58 !
59 TYPE(isba_t), INTENT(INOUT) :: i
60 !
61  INTEGER, INTENT(IN) :: ki
62  REAL, DIMENSION(:,:), INTENT(OUT) :: pwg
63  REAL, DIMENSION(:,:), INTENT(OUT) :: pwgi
64  REAL, DIMENSION(:,:), INTENT(OUT) :: pdg
65 !
66 !* 0.2 declarations of local variables
67  INTEGER :: jj, jlayer, jpatch ! loop indexes
68  INTEGER :: idepth
69  INTEGER :: ini, inp
70  REAL :: zwork
71 REAL, DIMENSION(SIZE(I%XPATCH,1)) :: zsumpatch
72  !
73  REAL(KIND=JPRB) :: zhook_handle
74 !-------------------------------------------------------------------------------
75 IF (lhook) CALL dr_hook('AVG_PATCH_WG',0,zhook_handle)
76 !
77 ini=SIZE(i%XPATCH,1)
78 inp=SIZE(i%XPATCH,2)
79 
80 zsumpatch(:) = 0.0
81 DO jpatch=1,inp
82  DO jj=1,ini
83  zsumpatch(jj) = zsumpatch(jj) + i%XPATCH(jj,jpatch)
84  END DO
85 END DO
86 
87 pwg(:,:) =0.0
88 pwgi(:,:)=0.0
89 pdg(:,:) =0.0
90 !
91 !
92 IF (inp/=1)THEN
93  DO jpatch=1,inp
94  DO jj=1,ini
95  IF(zsumpatch(jj) > 0.)THEN
96 !
97  zwork=max(0.0,i%XDG(jj,3,jpatch)-i%XDG(jj,2,jpatch))
98  pwg(jj,1) = pwg(jj,1) + i%XPATCH(jj,jpatch) * i%XWG(jj,1,jpatch) * i%XDG (jj,1,jpatch)
99  pwg(jj,2) = pwg(jj,2) + i%XPATCH(jj,jpatch) * i%XWG(jj,2,jpatch) * i%XDG (jj,2,jpatch)
100  pwg(jj,3) = pwg(jj,3) + i%XPATCH(jj,jpatch) * i%XWG(jj,3,jpatch) * zwork
101  pwgi(jj,1) = pwgi(jj,1) + i%XPATCH(jj,jpatch) * i%XWGI(jj,1,jpatch) * i%XDG (jj,1,jpatch)
102  pwgi(jj,2) = pwgi(jj,2) + i%XPATCH(jj,jpatch) * i%XWGI(jj,2,jpatch) * i%XDG (jj,2,jpatch)
103  pwgi(jj,3) = pwgi(jj,3) + i%XPATCH(jj,jpatch) * i%XWGI(jj,3,jpatch) * zwork
104  !
105  pdg(jj,1) = pdg(jj,1) + i%XPATCH(jj,jpatch) * i%XDG(jj,1,jpatch)
106  pdg(jj,2) = pdg(jj,2) + i%XPATCH(jj,jpatch) * i%XDG (jj,2,jpatch)
107  pdg(jj,3) = pdg(jj,3) + i%XPATCH(jj,jpatch) * i%XDG (jj,3,jpatch)
108  !
109 !
110  ENDIF
111  ENDDO
112  ENDDO
113 !
114  WHERE (pdg(:,1)>0.0)
115  pwg(:,1) = pwg(:,1) / pdg(:,1)
116  pwgi(:,1) = pwgi(:,1) / pdg(:,1)
117  ENDWHERE
118  WHERE (pdg(:,2)>0.0)
119  pwg(:,2) = pwg(:,2) / pdg(:,2)
120  pwgi(:,2) = pwgi(:,2) / pdg(:,2)
121  ENDWHERE
122  WHERE (pdg(:,3)-pdg(:,2)>0.0)
123  pwg(:,3) = pwg(:,3) / (pdg(:,3)-pdg(:,2))
124  pwgi(:,3) = pwgi(:,3) / (pdg(:,3)-pdg(:,2))
125  ENDWHERE
126 ELSE
127  pwg(:,:) = i%XWG(:,:,1)
128  pwgi(:,:) = i%XWGI(:,:,1)
129  pdg(:,:) = i%XDG (:,:,1)
130 
131 ENDIF
132 !
133 
134 IF (lhook) CALL dr_hook('AVG_PATCH_WG',1,zhook_handle)
135 
136 END SUBROUTINE avg_patch_wg
137 
138 
subroutine avg_patch_wg(I, KI, PWG, PWGI, PDG)
Definition: avg_patch_wg.F90:7