SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
pack_grid.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_grid(KMASK,HGRID1,HGRID2,PGRID_PAR1,PGRID_PAR2)
7 ! ##############################################################
8 !
9 !!**** *PACK_GRID* packs the grid definition vector
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !! METHOD
15 !! ------
16 !!
17 !! REFERENCE
18 !! ---------
19 !!
20 !! AUTHOR
21 !! ------
22 !!
23 !! V. Masson Meteo-France
24 !!
25 !! MODIFICATION
26 !! ------------
27 !!
28 !! Original 03/2004
29 !! P. Samuelsson SMHI 12/2012 Rotated lonlat
30 !!
31 !----------------------------------------------------------------------------
32 !
33 !* 0. DECLARATION
34 ! -----------
35 !
36 !
37 USE yomhook ,ONLY : lhook, dr_hook
38 USE parkind1 ,ONLY : jprb
39 !
40 USE modi_abor1_sfx
41 !
42 USE modi_pack_grid_cartesian
43 !
44 USE modi_pack_grid_conf_proj
45 !
46 USE modi_pack_grid_gauss
47 !
48 USE modi_pack_grid_ign
49 !
50 USE modi_pack_grid_lonlat_reg
51 !
52 USE modi_pack_grid_lonlatval
53 !
54 USE modi_pack_grid_lonlat_rot
55 IMPLICIT NONE
56 !
57 !* 0.1 Declaration of arguments
58 ! ------------------------
59 !
60 INTEGER, DIMENSION(:), INTENT(IN) :: kmask ! mask used
61  CHARACTER(LEN=10), INTENT(IN) :: hgrid1 ! input grid type
62  CHARACTER(LEN=10), INTENT(OUT):: hgrid2 ! output grid type
63 REAL, DIMENSION(:), POINTER :: pgrid_par1 ! parameters of input grid
64 REAL, DIMENSION(:), POINTER :: pgrid_par2 ! parameters of output packed grid
65 !
66 !* 0.2 Declaration of other local variables
67 ! ------------------------------------
68 !
69 INTEGER :: kgrid_par2 ! size of packed grid vector
70 REAL(KIND=JPRB) :: zhook_handle
71 !
72 !----------------------------------------------------------------------------
73 !
74 !* 1. Chooses grid type
75 ! -----------------
76 !
77 IF (lhook) CALL dr_hook('PACK_GRID',0,zhook_handle)
78 hgrid2 = hgrid1
79 !
80 !
81 !* 2. Computes grid parameters
82 ! ------------------------
83 !
84 SELECT CASE (hgrid1)
85 !
86  CASE("CONF PROJ ","LONLAT REG","CARTESIAN","GAUSS ","IGN ","LONLATVAL ","LONLAT ROT")
87  !
88  !
89  kgrid_par2 = 0
90  ALLOCATE(pgrid_par2(0))
91  IF (hgrid1=="CONF PROJ ") &
92  CALL pack_grid_conf_proj(SIZE(kmask),kmask,SIZE(pgrid_par1),pgrid_par1,kgrid_par2,.false.,pgrid_par2)
93  IF (hgrid1=="CARTESIAN ") &
94  CALL pack_grid_cartesian(SIZE(kmask),kmask,SIZE(pgrid_par1),pgrid_par1,kgrid_par2,.false.,pgrid_par2)
95  IF (hgrid1=="LONLAT REG") &
96  CALL pack_grid_lonlat_reg(SIZE(kmask),kmask,SIZE(pgrid_par1),pgrid_par1,kgrid_par2,.false.,pgrid_par2)
97  IF (hgrid1=="GAUSS ") &
98  CALL pack_grid_gauss(SIZE(kmask),kmask,SIZE(pgrid_par1),pgrid_par1,kgrid_par2,.false.,pgrid_par2)
99  IF (hgrid1=="IGN ") &
100  CALL pack_grid_ign(SIZE(kmask),kmask,SIZE(pgrid_par1),pgrid_par1,kgrid_par2,.false.,pgrid_par2)
101  IF (hgrid1=="LONLATVAL ") &
102  CALL pack_grid_lonlatval(SIZE(kmask),kmask,SIZE(pgrid_par1),pgrid_par1,kgrid_par2,.false.,pgrid_par2)
103  IF (hgrid1=="LONLAT ROT") &
104  CALL pack_grid_lonlat_rot(SIZE(kmask),kmask,SIZE(pgrid_par1),pgrid_par1,kgrid_par2,.false.,pgrid_par2)
105 
106  DEALLOCATE(pgrid_par2)
107  !
108  ALLOCATE(pgrid_par2(kgrid_par2))
109  IF (hgrid1=="CONF PROJ ") &
110  CALL pack_grid_conf_proj(SIZE(kmask),kmask,SIZE(pgrid_par1),pgrid_par1,kgrid_par2,.true.,pgrid_par2)
111  IF (hgrid1=="CARTESIAN ") &
112  CALL pack_grid_cartesian(SIZE(kmask),kmask,SIZE(pgrid_par1),pgrid_par1,kgrid_par2,.true.,pgrid_par2)
113  IF (hgrid1=="LONLAT REG") &
114  CALL pack_grid_lonlat_reg(SIZE(kmask),kmask,SIZE(pgrid_par1),pgrid_par1,kgrid_par2,.true.,pgrid_par2)
115  IF (hgrid1=="GAUSS ") &
116  CALL pack_grid_gauss(SIZE(kmask),kmask,SIZE(pgrid_par1),pgrid_par1,kgrid_par2,.true.,pgrid_par2)
117  IF (hgrid1=="IGN ") &
118  CALL pack_grid_ign(SIZE(kmask),kmask,SIZE(pgrid_par1),pgrid_par1,kgrid_par2,.true.,pgrid_par2)
119  IF (hgrid1=="LONLATVAL ") &
120  CALL pack_grid_lonlatval(SIZE(kmask),kmask,SIZE(pgrid_par1),pgrid_par1,kgrid_par2,.true.,pgrid_par2)
121  IF (hgrid1=="LONLAT ROT") &
122  CALL pack_grid_lonlat_rot(SIZE(kmask),kmask,SIZE(pgrid_par1),pgrid_par1,kgrid_par2,.true.,pgrid_par2)
123  !
124  CASE default
125  CALL abor1_sfx('PACK_GRID: GRID TYPE NOT SUPPORTED '//hgrid1)
126 
127 END SELECT
128 IF (lhook) CALL dr_hook('PACK_GRID',1,zhook_handle)
129 !
130 !-------------------------------------------------------------------------------
131 !
132 END SUBROUTINE pack_grid
subroutine pack_grid_lonlat_reg(KMASK_SIZE, KMASK, KGRID_PAR1, PGRID_PAR1, KGRID_PAR2, OPACK, PGRID_PAR2)
subroutine pack_grid_lonlatval(KMASK_SIZE, KMASK, KGRID_PAR1, PGRID_PAR1, KGRID_PAR2, OPACK, PGRID_PAR2)
subroutine pack_grid_conf_proj(KMASK_SIZE, KMASK, KGRID_PAR1, PGRID_PAR1, KGRID_PAR2, OPACK, PGRID_PAR2)
subroutine pack_grid_ign(KMASK_SIZE, KMASK, KGRID_PAR1, PGRID_PAR1, KGRID_PAR2, OPACK, PGRID_PAR2)
subroutine pack_grid_lonlat_rot(KMASK_SIZE, KMASK, KGRID_PAR1, PGRID_PAR1, KGRID_PAR2, OPACK, PGRID_PAR2)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine pack_grid(KMASK, HGRID1, HGRID2, PGRID_PAR1, PGRID_PAR2)
Definition: pack_grid.F90:6
subroutine pack_grid_cartesian(KMASK_SIZE, KMASK, KGRID_PAR1, PGRID_PAR1, KGRID_PAR2, OPACK, PGRID_PAR2)
subroutine pack_grid_gauss(KMASK_SIZE, KMASK, KGRID_PAR1, PGRID_PAR1, KGRID_PAR2, OPACK, PGRID_PAR2)