SURFEX v8.1
General documentation of Surfex
get_grid_coord.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 get_grid_coord (HGRID_IN, KGRID_PAR_IN, PGRID_PAR_IN, KSIZE_FULL, &
7  KLUOUT,PX,PY,KL,HGRID,PGRID_PAR)
8 ! #######################################
9 !!
10 !! PURPOSE
11 !! -------
12 !! Gets the coordinates of all points in the natural system of each projection
13 !!
14 !! METHOD
15 !! ------
16 !!
17 !! EXTERNAL
18 !! --------
19 !!
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !! AUTHOR
29 !! ------
30 !!
31 !! V. Masson Meteo-France
32 !!
33 !! MODIFICATION
34 !! ------------
35 !!
36 !! Original 01/2004
37 !! 10/2007 E. Martin IGN Grid
38 !! 10/2014 P. Samuelsson SMHI Rotated lonlat
39 !----------------------------------------------------------------------------
40 !
41 !* 0. DECLARATION
42 ! -----------
43 !
44 USE yomhook ,ONLY : lhook, dr_hook
45 USE parkind1 ,ONLY : jprb
46 !
47 USE modi_abor1_sfx
48 !
49 USE modi_get_grid_coord_cartesian
50 !
51 USE modi_get_grid_coord_conf_proj
52 !
53 USE modi_get_grid_coord_gauss
54 !
55 USE modi_get_grid_coord_ign
56 !
57 USE modi_get_grid_coord_lonlat_reg
58 !
59 USE modi_get_grid_coord_lonlatval
60 !
61 USE modi_get_grid_coord_lonlat_rot
62 IMPLICIT NONE
63 !
64 !* 0.1 Declaration of dummy arguments
65 ! ------------------------------
66 !
67  CHARACTER(LEN=10), INTENT(IN) :: HGRID_IN ! grid type
68 INTEGER, INTENT(IN) :: KGRID_PAR_IN
69 REAL, DIMENSION(:), INTENT(IN) :: PGRID_PAR_IN ! parameters defining this grid
70 !
71 INTEGER, INTENT(IN) :: KSIZE_FULL
72 !
73 INTEGER, INTENT(IN) :: KLUOUT ! output listing logical unit
74 REAL, DIMENSION(:), OPTIONAL, INTENT(OUT) :: PX ! X natural coordinate in the projection
75 REAL, DIMENSION(:), OPTIONAL, INTENT(OUT) :: PY ! X natural coordinate in the projection
76 INTEGER, OPTIONAL, INTENT(IN) :: KL ! number of points
77  CHARACTER(LEN=10), OPTIONAL, INTENT(IN) :: HGRID ! grid type
78 REAL, DIMENSION(:), OPTIONAL, POINTER :: PGRID_PAR ! parameters defining this grid
79 !
80 !
81 !* 0.2 Declaration of local variables
82 ! ------------------------------
83 !
84 REAL, DIMENSION(:), ALLOCATABLE :: ZX
85 REAL, DIMENSION(:), ALLOCATABLE :: ZY
86 !
87  CHARACTER(LEN=10) :: YGRID
88 REAL, DIMENSION(:), ALLOCATABLE :: ZGRID_PAR
89 INTEGER :: IGRID_PAR
90 INTEGER :: IL
91 REAL(KIND=JPRB) :: ZHOOK_HANDLE
92 !------------------------------------------------------------------------------
93 !
94 IF (lhook) CALL dr_hook('GET_GRID_COORD',0,zhook_handle)
95 IF (PRESENT(hgrid)) THEN
96  ygrid = hgrid
97  igrid_par = SIZE(pgrid_par)
98  il = kl
99  ALLOCATE(zgrid_par(igrid_par))
100  zgrid_par = pgrid_par
101 ELSE
102  ygrid = hgrid_in
103  igrid_par = kgrid_par_in
104  il = ksize_full
105  ALLOCATE(zgrid_par(igrid_par))
106  zgrid_par = pgrid_par_in
107 END IF
108 !
109 ALLOCATE(zx(il))
110 ALLOCATE(zy(il))
111 !
112 !
113 SELECT CASE (ygrid)
114 !
115 !* 1. Conformal projection grid
116 ! -------------------------
117 !
118  CASE ('CONF PROJ ')
119  CALL get_grid_coord_conf_proj(igrid_par,il,zgrid_par,zx,zy)
120  ! note that all points of the grid will be kept, whatever the surface
121  ! type under consideration (e.g. sea points will be kept even for
122  ! initialization of continents)
123  !
124 !
125 !* 2. Regular latlon grid
126 ! -------------------
127 !
128  CASE ('LONLAT REG')
129  CALL get_grid_coord_lonlat_reg(igrid_par,il,zgrid_par,zx,zy)
130 
131 !
132 !* 3. Cartesian grid
133 ! --------------
134 !
135  CASE ('CARTESIAN ')
136  CALL get_grid_coord_cartesian(igrid_par,il,zgrid_par,zx,zy)
137  ! note that all points of the grid will be kept, whatever the surface
138  ! type under consideration (e.g. sea points will be kept even for
139  ! initialization of continents)
140  !
141 !
142 !* 4. Gaussian grid
143 ! -------------
144 !
145  CASE ('GAUSS ')
146  CALL get_grid_coord_gauss(igrid_par,il,zgrid_par,zx,zy)
147 !
148 !* 5. IGN grid
149 ! -------------
150 !
151  CASE ('IGN ')
152  CALL get_grid_coord_ign(igrid_par,il,zgrid_par,zx,zy)
153 
154 !
155 !* 6. lonlatval
156 ! -------------
157 !
158  CASE ('LONLATVAL ')
159  CALL get_grid_coord_lonlatval(igrid_par,il,zgrid_par,zx,zy)
160 
161 !
162 !* 7. Rotated lonlat grid
163 ! -------------------
164 !
165  CASE ('LONLAT ROT')
166  CALL get_grid_coord_lonlat_rot(igrid_par,il,zgrid_par,zx,zy)
167 
168 !
169 !* 8. Other cases
170 ! -----------
171 !
172  CASE DEFAULT
173  CALL abor1_sfx('GET_GRID_COORD: GRID TYPE '//ygrid//' NOT SUPPORTED')
174 
175 END SELECT
176 !
177 IF(PRESENT(px)) px(:)=zx(:)
178 IF(PRESENT(py)) py(:)=zy(:)
179 !
180 DEALLOCATE(zx)
181 DEALLOCATE(zy)
182 DEALLOCATE(zgrid_par)
183 IF (lhook) CALL dr_hook('GET_GRID_COORD',1,zhook_handle)
184 !-------------------------------------------------------------------------------
185 !
186 END SUBROUTINE get_grid_coord
subroutine get_grid_coord_lonlat_rot(KGRID_PAR, KL, PGRID_PAR, PX, PY)
subroutine get_grid_coord_lonlatval(KGRID_PAR, KL, PGRID_PAR, PX, PY)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
integer, parameter jprb
Definition: parkind1.F90:32
subroutine get_grid_coord_conf_proj(KGRID_PAR, KL, PGRID_PAR, PX, PY)
subroutine get_grid_coord(HGRID_IN, KGRID_PAR_IN, PGRID_PAR_IN, K
subroutine get_grid_coord_cartesian(KGRID_PAR, KL, PGRID_PAR, PX, PY)
subroutine get_grid_coord_gauss(KGRID_PAR, KL, PGRID_PAR, PLON_XY, PLA
logical lhook
Definition: yomhook.F90:15
subroutine get_grid_coord_ign(KGRID_PAR, KL, PGRID_PAR, PX, PY)
subroutine get_grid_coord_lonlat_reg(KGRID_PAR, KL, PGRID_PAR, PX, PY)