SURFEX v8.1
General documentation of Surfex
pack_pgd_isba.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  SUBROUTINE pack_pgd_isba (DTCO, KDIM, ISS, U, &
7  HPROGRAM, &
8  PAOSIP, PAOSIM, PAOSJP, PAOSJM, &
9  PHO2IP, PHO2IM, PHO2JP, PHO2JM, &
10  PSSO_SLOPE )
11 ! ##############################################################
12 !
13 !!**** *PACK_PGD_ISBA* packs ISBA physiographic fields from all surface points to ISBA points
14 !!
15 !! PURPOSE
16 !! -------
17 !!
18 !! METHOD
19 !! ------
20 !!
21 !
22 !! EXTERNAL
23 !! --------
24 !!
25 !! IMPLICIT ARGUMENTS
26 !! ------------------
27 !!
28 !! REFERENCE
29 !! ---------
30 !!
31 !! AUTHOR
32 !! ------
33 !!
34 !! V. Masson Meteo-France
35 !!
36 !! MODIFICATION
37 !! ------------
38 !!
39 !! Original 03/2004
40 !! Escobar J. 08/02/2005 : bug declare ILU local variable
41 !!
42 !----------------------------------------------------------------------------
43 !
44 !* 0. DECLARATION
45 ! -----------
46 !
47 !
48 !
49 !
51 USE modd_sso_n, ONLY : sso_t
52 USE modd_surf_atm_n, ONLY : surf_atm_t
53 !
55 !
56 USE yomhook ,ONLY : lhook, dr_hook
57 USE parkind1 ,ONLY : jprb
58 !
59 USE modi_get_surf_mask_n
60 !
61 USE modi_get_type_dim_n
62 !
63 USE modi_get_luout
64 IMPLICIT NONE
65 !
66 !* 0.1 Declaration of arguments
67 ! ------------------------
68 !
69 !
70 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
71 INTEGER, INTENT(INOUT) :: KDIM
72 TYPE(sso_t), INTENT(INOUT) :: ISS
73 TYPE(surf_atm_t), INTENT(INOUT) :: U
74 !
75  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! Type of program
76 REAL, DIMENSION(:), INTENT(IN) :: PAOSIP ! A/S i+ on all surface points
77 REAL, DIMENSION(:), INTENT(IN) :: PAOSIM ! A/S i- on all surface points
78 REAL, DIMENSION(:), INTENT(IN) :: PAOSJP ! A/S j+ on all surface points
79 REAL, DIMENSION(:), INTENT(IN) :: PAOSJM ! A/S j- on all surface points
80 REAL, DIMENSION(:), INTENT(IN) :: PHO2IP ! h/2 i+ on all surface points
81 REAL, DIMENSION(:), INTENT(IN) :: PHO2IM ! h/2 i- on all surface points
82 REAL, DIMENSION(:), INTENT(IN) :: PHO2JP ! h/2 j+ on all surface points
83 REAL, DIMENSION(:), INTENT(IN) :: PHO2JM ! h/2 j- on all surface points
84 REAL, DIMENSION(:), INTENT(IN) :: PSSO_SLOPE! subgrid slope on all surface points
85 !
86 !
87 !* 0.2 Declaration of local variables
88 ! ------------------------------
89 !
90 INTEGER :: ILU ! expected physical size of full surface array
91 INTEGER :: ILUOUT ! output listing logical unit
92 INTEGER, DIMENSION(:), POINTER :: IMASK ! mask for packing from complete field to nature field
93 REAL(KIND=JPRB) :: ZHOOK_HANDLE
94 !
95 !-------------------------------------------------------------------------------
96 !
97 IF (lhook) CALL dr_hook('PACK_PGD_ISBA',0,zhook_handle)
98  CALL get_luout(hprogram,iluout)
99 !
100 !* 1. Number of points and packing
101 ! ----------------------------
102 !
103  CALL get_type_dim_n(dtco, u, 'NATURE',kdim)
104 ALLOCATE(imask(kdim))
105 ilu=0
106  CALL get_surf_mask_n(dtco, u, 'NATURE',kdim,imask,ilu,iluout)
107 !
108 !
109 !-------------------------------------------------------------------------------
110 !
111 !* 2. Packing of fields
112 ! -----------------
113 !
114 ALLOCATE(iss%XAOSIP(kdim))
115 ALLOCATE(iss%XAOSIM(kdim))
116 ALLOCATE(iss%XAOSJP(kdim))
117 ALLOCATE(iss%XAOSJM(kdim))
118 ALLOCATE(iss%XHO2IP(kdim))
119 ALLOCATE(iss%XHO2IM(kdim))
120 ALLOCATE(iss%XHO2JP(kdim))
121 ALLOCATE(iss%XHO2JM(kdim))
122 ALLOCATE(iss%XSSO_SLOPE(kdim))
123  CALL pack_same_rank(imask,paosip(:),iss%XAOSIP(:))
124  CALL pack_same_rank(imask,paosim(:),iss%XAOSIM(:))
125  CALL pack_same_rank(imask,paosjp(:),iss%XAOSJP(:))
126  CALL pack_same_rank(imask,paosjm(:),iss%XAOSJM(:))
127  CALL pack_same_rank(imask,pho2ip(:),iss%XHO2IP(:))
128  CALL pack_same_rank(imask,pho2im(:),iss%XHO2IM(:))
129  CALL pack_same_rank(imask,pho2jp(:),iss%XHO2JP(:))
130  CALL pack_same_rank(imask,pho2jm(:),iss%XHO2JM(:))
131  CALL pack_same_rank(imask,psso_slope(:),iss%XSSO_SLOPE(:))
132 !
133 IF (lhook) CALL dr_hook('PACK_PGD_ISBA',1,zhook_handle)
134 !
135 !-------------------------------------------------------------------------------
136 !
137 END SUBROUTINE pack_pgd_isba
subroutine get_type_dim_n(DTCO, U, HTYPE, KDIM)
subroutine get_surf_mask_n(DTCO, U, HTYPE, KDIM, KMASK, KLU, KLUOUT)
integer, parameter jprb
Definition: parkind1.F90:32
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
logical lhook
Definition: yomhook.F90:15
subroutine pack_pgd_isba(DTCO, KDIM, ISS, U, HPROGRAM,