SURFEX v8.1
General documentation of Surfex
dispatch_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 dispatch_wg (S, NP, NPE, PWG, PWGI, 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 !
45 USE modd_surf_par, ONLY : xundef, nundef
46 USE modd_isba_par, ONLY : xwgmin
47 USE modd_coupling_topd, ONLY : xatop
48 !
49 USE yomhook , ONLY : lhook, dr_hook
50 USE parkind1 , ONLY : jprb
51 !
52 IMPLICIT NONE
53 !
54 !* 0.1 declarations of argumentsXPATCH
55 !
56 TYPE(isba_s_t), INTENT(INOUT) :: S
57 TYPE(isba_np_t), INTENT(INOUT) :: NP
58 TYPE(isba_npe_t), INTENT(INOUT) :: NPE
59 !
60  REAL, DIMENSION(:,:), INTENT(IN) :: PWG
61  REAL, DIMENSION(:,:), INTENT(IN) :: PWGI
62  REAL, DIMENSION(:,:), INTENT(IN) :: PDG
63 !
64 !* 0.2 declarations of local variables
65  INTEGER :: JJ, JLAYER, JPATCH ! loop indexes
66  INTEGER :: IDEPTH
67  INTEGER :: INI, INP
68  REAL :: ZWORK,ZTMP, ZWORK2
69  REAL, DIMENSION(SIZE(S%XPATCH,1)) :: ZSUMPATCH
70  REAL, DIMENSION(SIZE(S%XPATCH,1),SIZE(S%XPATCH,2)) :: ZFRAC_PATCH2
71  REAL, DIMENSION(SIZE(S%XPATCH,1),SIZE(S%XPATCH,2)) :: ZFRAC_PATCH3
72  REAL, DIMENSION(SIZE(PWG,1),SIZE(PWG,2)) :: ZWG_CTL
73  !
74  INTEGER :: IMASK, JP
75  REAL(KIND=JPRB) :: ZHOOK_HANDLE
76 !-------------------------------------------------------------------------------
77 IF (lhook) CALL dr_hook('DISPATCH_WG',0,zhook_handle)
78 !
79 ini=SIZE(s%XPATCH,1)
80 inp=SIZE(s%XPATCH,2)
81 !
82  !DO JPATCH=1,INP
83  !
84  ! write(*,*) 'In dispatch XPATCH (1)',JPATCH,XPATCH(1,JPATCH),XWG(1,2,JPATCH)
85  !ENDDO
86 !write(*,*) 'In dispatch wg ,KI,INI,INP ',KI,INI,INP
87 IF (inp/=1)THEN
88  DO jp=1,inp
89  DO jj=1,np%AL(jp)%NSIZE_P
90  imask = np%AL(jp)%NR_P(jj)
91  IF ((s%XPATCH(imask,jp)/=xundef).AND.(s%XPATCH(imask,jp)/=0.).AND.(xatop(imask)==1.)) THEN
92  WHERE (npe%AL(jp)%XWG(jj,:)/=xundef)
93  npe%AL(jp)%XWG(jj,:) = pwg(imask,:)
94  npe%AL(jp)%XWGI(jj,:)= pwgi(imask,:)
95  np%AL(jp)%XDG(jj,:) = pdg(imask,:)
96  ENDWHERE
97  ENDIF
98  ENDDO
99  ENDDO
100 
101 ELSE
102  DO jp=1,inp
103  DO jj=1,np%AL(jp)%NSIZE_P
104  imask = np%AL(jp)%NR_P(jj)
105  npe%AL(1)%XWG (jj,:) = pwg(imask,:)
106  npe%AL(1)%XWGI(jj,:) = pwgi(imask,:)
107  np%AL(1)%XDG(jj,:) = pdg(imask,:)
108  ENDDO
109  ENDDO
110 ENDIF
111 !
112 DO jp = 1,inp
113  WHERE (npe%AL(jp)%XWG(:,:)<xwgmin)
114  npe%AL(jp)%XWG(:,:)=xwgmin
115  ENDWHERE
116 ENDDO
117  !
118 IF (lhook) CALL dr_hook('DISPATCH_WG',1,zhook_handle)
119 
120 END SUBROUTINE dispatch_wg
121 
122 
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
integer, parameter nundef
logical lhook
Definition: yomhook.F90:15
real, dimension(:), allocatable xatop
subroutine dispatch_wg(S, NP, NPE, PWG, PWGI, PDG)
Definition: dispatch_wg.F90:8