SURFEX v8.1
General documentation of Surfex
pack_init.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_init(DTCO, U, UG, HPROGRAM, HSURF, G, OCOVER, PCOVER, PZS, PDIR )
7 ! ##############################################################
8 !
9 !!**** *PACK_INIT* packs ISBA physiographic fields from all surface points to ISBA points
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !! METHOD
15 !! ------
16 !!
17 !
18 !! EXTERNAL
19 !! --------
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !! AUTHOR
28 !! ------
29 !!
30 !! V. Masson Meteo-France
31 !!
32 !! MODIFICATION
33 !! ------------
34 !!
35 !! Original 03/2004
36 !! Escobar J. 08/02/2005 : bug declare ILU local variable
37 !!
38 !----------------------------------------------------------------------------
39 !
40 !* 0. DECLARATION
41 ! -----------
42 !
43 USE modd_sfx_grid_n, ONLY : grid_t
46 USE modd_surf_atm_n, ONLY : surf_atm_t
47 !
48 USE modd_data_cover_par, ONLY : jpcover
49 !
50 USE modi_get_cover_n
51 USE modi_get_lcover_n
52 USE modi_get_zs_n
54 USE modi_pack_grid
55 USE modi_latlon_grid
56 !
57 !
58 USE yomhook ,ONLY : lhook, dr_hook
59 USE parkind1 ,ONLY : jprb
60 !
61 USE modi_get_surf_mask_n
62 !
63 USE modi_get_type_dim_n
64 !
65 USE modi_get_luout
66 IMPLICIT NONE
67 !
68 !* 0.1 Declaration of arguments
69 ! ------------------------
70 !
71 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
72 TYPE(surf_atm_t), INTENT(INOUT) :: U
73 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
74 !
75  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! Type of program
76  CHARACTER(LEN=6), INTENT(IN) :: HSURF ! surface type
77 !
78 TYPE(grid_t), INTENT(INOUT) :: G
79 LOGICAL, DIMENSION(:), INTENT(OUT):: OCOVER ! list of present cover
80 REAL, DIMENSION(:,:), POINTER :: PCOVER ! cover fraction
81 REAL, DIMENSION(:), INTENT(OUT):: PZS ! zs
82 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PDIR ! angle of grid axis with N.
83 !
84 !
85 !* 0.2 Declaration of local variables
86 ! ------------------------------
87 !
88 INTEGER :: ILUOUT ! output listing logical unit
89 INTEGER :: IL ! number of points
90 INTEGER :: ILU ! expected physical size of full surface array
91 INTEGER :: JCOVER
92 INTEGER, DIMENSION(:), POINTER :: IMASK ! mask for packing from complete field to nature field
93 REAL, DIMENSION(SIZE(G%XLAT)) :: ZDIR
94 !
95 REAL, DIMENSION(U%NSIZE_FULL) :: ZCOVER ! cover on all surface points
96 REAL, DIMENSION(U%NSIZE_FULL) :: ZZS ! zs on all surface points
97 REAL(KIND=JPRB) :: ZHOOK_HANDLE
98 !-------------------------------------------------------------------------------
99 !
100 IF (lhook) CALL dr_hook('PACK_INIT',0,zhook_handle)
101  CALL get_luout(hprogram,iluout)
102 !
103 !* 1. Number of points and packing
104 ! ----------------------------
105 !
106  CALL get_type_dim_n(dtco,u,hsurf,il)
107 !
108 ALLOCATE(imask(il))
109 ilu=0
110  CALL get_surf_mask_n(dtco,u,hsurf,il,imask,ilu,iluout)
111 !
112 !-------------------------------------------------------------------------------
113 !
114 !* 2. Packing of grid
115 ! ---------------
116 !
117  CALL pack_grid(imask,ug%G%CGRID,g%CGRID,ug%G%XGRID_PAR,g%XGRID_PAR)
118 !
119  CALL get_lcover_n(u,hprogram,jpcover,ocover)
120 !
121 IF (il==0) THEN
122  ALLOCATE(pcover(0,0))
123  IF (lhook) CALL dr_hook('PACK_INIT',1,zhook_handle)
124  RETURN
125 ENDIF
126 !
127 !-------------------------------------------------------------------------------
128 !
129 !* 3. Computes geographical quantities
130 ! --------------------------------
131 !
132  CALL latlon_grid(g,il,zdir)
133 !
134 IF (PRESENT(pdir)) pdir = zdir
135 !
136 !-------------------------------------------------------------------------------
137 !
138 !* 4. Packing of fields
139 ! -----------------
140 !
141 ALLOCATE(pcover(SIZE(g%XLAT),count(ocover)))
142 !
143 DO jcover=1,count(ocover)
144  CALL get_cover_n(u,hprogram,jcover,zcover)
145  CALL pack_same_rank(imask,zcover(:),pcover(:,jcover))
146 ENDDO
147  CALL get_zs_n(u,hprogram,u%NSIZE_FULL,zzs)
148 !
149 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
150 !
151  CALL pack_same_rank(imask,zzs(:),pzs(:))
152 !
153 !-------------------------------------------------------------------------------
154 !
155 DEALLOCATE(imask)
156 IF (lhook) CALL dr_hook('PACK_INIT',1,zhook_handle)
157 !
158 !-------------------------------------------------------------------------------
159 !
160 END SUBROUTINE pack_init
subroutine get_type_dim_n(DTCO, U, HTYPE, KDIM)
subroutine latlon_grid(G, KL, PDIR)
Definition: latlon_grid.F90:7
subroutine pack_init(DTCO, U, UG, HPROGRAM, HSURF, G, OCOVER, PCOV
Definition: pack_init.F90:7
subroutine get_surf_mask_n(DTCO, U, HTYPE, KDIM, KMASK, KLU, KLUOUT)
integer, parameter jprb
Definition: parkind1.F90:32
subroutine get_lcover_n(U, HPROGRAM, KCOVER, OCOVER)
Definition: get_lcovern.F90:7
subroutine get_cover_n(U, HPROGRAM, KCOVER, PCOVER)
Definition: get_covern.F90:8
subroutine pack_grid(KMASK, HGRID1, HGRID2, PGRID_PAR1, PGRID_PAR2)
Definition: pack_grid.F90:7
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
logical lhook
Definition: yomhook.F90:15
subroutine get_zs_n(U, HPROGRAM, KI, PZS)
Definition: get_zsn.F90:8
static int count
Definition: memory_hook.c:21