SURFEX v8.1
General documentation of Surfex
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 (IO, NP, NPE, PWG, PWGI, PDG)
8 ! ##########################
9 !
10 !!
11 !! PURPOSE
12 !! -------
13 ! from AVERAGE_DIAG_MISC_ISBA_n
14 !! ONLY for 3L cases!!
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
48 USE yomhook , ONLY : lhook, dr_hook
49 USE parkind1 , ONLY : jprb
50 !
51 !
52 IMPLICIT NONE
53 !
54 !* 0.1 declarations of arguments
55 !
56 TYPE(isba_options_t), INTENT(IN) :: IO
57 TYPE(isba_np_t), INTENT(INOUT) :: NP
58 TYPE(isba_npe_t), INTENT(INOUT) :: NPE
59 !
60  REAL, DIMENSION(:,:), INTENT(OUT) :: PWG
61  REAL, DIMENSION(:,:), INTENT(OUT) :: PWGI
62  REAL, DIMENSION(:,:), INTENT(OUT) :: PDG
63 !
64 !* 0.2 declarations of local variables
65 TYPE(isba_p_t), POINTER :: PK
66 TYPE(isba_pe_t), POINTER :: PEK
67  INTEGER :: JI, JP ! loop indexes
68  INTEGER :: IMASK
69  REAL :: ZWORK
70 REAL, DIMENSION(SIZE(PWG,1)) :: ZSUMPATCH
71  !
72  REAL(KIND=JPRB) :: ZHOOK_HANDLE
73 !-------------------------------------------------------------------------------
74 IF (lhook) CALL dr_hook('AVG_PATCH_WG',0,zhook_handle)
75 !
76 zsumpatch(:) = 0.0
77 DO jp=1,io%NPATCH
78  DO ji=1,np%AL(jp)%NSIZE_P
79  imask = np%AL(jp)%NR_P(ji)
80  zsumpatch(imask) = zsumpatch(imask) + np%AL(jp)%XPATCH(ji)
81  END DO
82 END DO
83 
84 pwg(:,:) =0.0
85 pwgi(:,:)=0.0
86 pdg(:,:) =0.0
87 !
88 !
89 IF (io%NPATCH/=1)THEN
90  DO jp=1,io%NPATCH
91  pk => np%AL(jp)
92  pek => npe%AL(jp)
93  DO ji=1,pk%NSIZE_P
94  imask = pk%NR_P(ji)
95  IF(zsumpatch(imask) > 0.)THEN
96  !
97  zwork=max(0.0,pk%XDG(ji,3)-pk%XDG(ji,2))
98  pwg(imask,1) = pwg(imask,1) + pk%XPATCH(ji) * pek%XWG(ji,1) * pk%XDG (ji,1)
99  pwg(imask,2) = pwg(imask,2) + pk%XPATCH(ji) * pek%XWG(ji,2) * pk%XDG (ji,2)
100  pwg(imask,3) = pwg(imask,3) + pk%XPATCH(ji) * pek%XWG(ji,3) * zwork
101  pwgi(imask,1) = pwgi(imask,1) + pk%XPATCH(ji) * pek%XWGI(ji,1) * pk%XDG (ji,1)
102  pwgi(imask,2) = pwgi(imask,2) + pk%XPATCH(ji) * pek%XWGI(ji,2) * pk%XDG (ji,2)
103  pwgi(imask,3) = pwgi(imask,3) + pk%XPATCH(ji) * pek%XWGI(ji,3) * zwork
104  !
105  pdg(imask,1) = pdg(imask,1) + pk%XPATCH(ji) * pk%XDG(ji,1)
106  pdg(imask,2) = pdg(imask,2) + pk%XPATCH(ji) * pk%XDG(ji,2)
107  pdg(imask,3) = pdg(imask,3) + pk%XPATCH(ji) * pk%XDG(ji,3)
108  !
109  ENDIF
110  ENDDO
111  ENDDO
112  !
113  WHERE (pdg(:,1)>0.0)
114  pwg(:,1) = pwg(:,1) / pdg(:,1)
115  pwgi(:,1) = pwgi(:,1) / pdg(:,1)
116  ENDWHERE
117  WHERE (pdg(:,2)>0.0)
118  pwg(:,2) = pwg(:,2) / pdg(:,2)
119  pwgi(:,2) = pwgi(:,2) / pdg(:,2)
120  ENDWHERE
121  WHERE (pdg(:,3)-pdg(:,2)>0.0)
122  pwg(:,3) = pwg(:,3) / (pdg(:,3)-pdg(:,2))
123  pwgi(:,3) = pwgi(:,3) / (pdg(:,3)-pdg(:,2))
124  ENDWHERE
125 ELSE
126 
127  DO jp=1,io%NPATCH
128  DO ji=1,np%AL(jp)%NSIZE_P
129  imask = np%AL(jp)%NR_P(ji)
130  pwg(imask,:) = npe%AL(1)%XWG (ji,:)
131  pwgi(imask,:) = npe%AL(1)%XWGI(ji,:)
132  pdg(imask,:) = np%AL (1)%XDG (ji,:)
133  ENDDO
134  ENDDO
135 
136 ENDIF
137 !
138 
139 IF (lhook) CALL dr_hook('AVG_PATCH_WG',1,zhook_handle)
140 
141 END SUBROUTINE avg_patch_wg
142 
143 
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
integer, parameter nundef
logical lhook
Definition: yomhook.F90:15
subroutine avg_patch_wg(IO, NP, NPE, PWG, PWGI, PDG)
Definition: avg_patch_wg.F90:8