SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
mode_gridtype_lonlat_reg.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 ! ##############################
7 ! ##############################
8 !
9 !############################################################################
10 !############################################################################
11 !############################################################################
12 !
13 USE yomhook ,ONLY : lhook, dr_hook
14 USE parkind1 ,ONLY : jprb
15 !
16  CONTAINS
17 !############################################################################
18 !############################################################################
19 !############################################################################
20 ! ####################################################################
21  SUBROUTINE put_gridtype_lonlat_reg(PGRID_PAR,PLONMIN,PLONMAX, &
22  platmin,platmax,klon,klat,kl,plon,plat )
23 ! ####################################################################
24 !
25 !!**** *PUT_GRIDTYPE_LONLAT_REG* - routine to store in PGRID_PAR the horizontal grid
26 !!
27 !! AUTHOR
28 !! ------
29 !! V. Masson *Meteo France*
30 !!
31 !! MODIFICATIONS
32 !! -------------
33 !! Original 01/2004
34 !-------------------------------------------------------------------------------
35 !
36 !* 0. DECLARATIONS
37 ! ------------
38 !
39 IMPLICIT NONE
40 !
41 !
42 !* 0.1 Declarations of arguments
43 ! -------------------------
44 !
45 REAL, INTENT(IN) :: plonmin ! minimum longitude
46 REAL, INTENT(IN) :: plonmax ! maximum longitude
47 REAL, INTENT(IN) :: platmin ! minimum latitude
48 REAL, INTENT(IN) :: platmax ! maximum latitude
49 INTEGER, INTENT(IN) :: klon ! number of points in longitude
50 INTEGER, INTENT(IN) :: klat ! number of points in latitude
51 INTEGER, INTENT(IN) :: kl ! number of points used
52 REAL, DIMENSION(:), INTENT(IN) :: plon ! longitudes of all points
53 REAL, DIMENSION(:), INTENT(IN) :: plat ! latitudes of all points
54 REAL, DIMENSION(:),POINTER :: pgrid_par! parameters defining this grid
55 REAL(KIND=JPRB) :: zhook_handle
56 !
57 !
58 !* 0.2 Declarations of local variables
59 ! -------------------------------
60 !
61 !-------------------------------------------------------------------------------
62 IF (lhook) CALL dr_hook('MODE_GRIDTYPE_LONLAT_REG:PUT_GRIDTYPE_LONLAT_REG',0,zhook_handle)
63 ALLOCATE(pgrid_par(7+2*kl))
64 pgrid_par(1) = plonmin
65 pgrid_par(2) = plonmax
66 pgrid_par(3) = platmin
67 pgrid_par(4) = platmax
68 pgrid_par(5) = float(klon)
69 pgrid_par(6) = float(klat)
70 pgrid_par(7) = float(kl)
71 pgrid_par(8:7+kl) = plon(:)
72 pgrid_par(8+kl:7+2*kl) = plat(:)
73 IF (lhook) CALL dr_hook('MODE_GRIDTYPE_LONLAT_REG:PUT_GRIDTYPE_LONLAT_REG',1,zhook_handle)
74 !-------------------------------------------------------------------------------
75 END SUBROUTINE put_gridtype_lonlat_reg
76 !############################################################################
77 !############################################################################
78 !############################################################################
79 ! ####################################################################
80  SUBROUTINE get_gridtype_lonlat_reg(PGRID_PAR,PLONMIN,PLONMAX, &
81  platmin,platmax,klon,klat, &
82  kl,plon,plat )
83 ! ####################################################################
84 !
85 !!**** *GET_GRIDTYPE_LONLAT_REG* - routine to get from PGRID_PAR the horizontal grid
86 !!
87 !! AUTHOR
88 !! ------
89 !! V. Masson *Meteo France*
90 !!
91 !! MODIFICATIONS
92 !! -------------
93 !! Original 01/2004
94 !-------------------------------------------------------------------------------
95 !
96 !* 0. DECLARATIONS
97 ! ------------
98 !
99 IMPLICIT NONE
100 !
101 !
102 !* 0.1 Declarations of arguments
103 ! -------------------------
104 !
105 REAL, DIMENSION(:), INTENT(IN) :: pgrid_par! parameters defining this grid
106 REAL, INTENT(OUT), OPTIONAL :: plonmin ! minimum longitude
107 REAL, INTENT(OUT), OPTIONAL :: plonmax ! maximum longitude
108 REAL, INTENT(OUT), OPTIONAL :: platmin ! minimum latitude
109 REAL, INTENT(OUT), OPTIONAL :: platmax ! maximum latitude
110 INTEGER, INTENT(OUT), OPTIONAL :: klon ! number of points in longitude
111 INTEGER, INTENT(OUT), OPTIONAL :: klat ! number of points in latitude
112 INTEGER, INTENT(OUT), OPTIONAL :: kl ! number of points used
113 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: plon ! longitudes of all points
114 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: plat ! latitudes of all points
115 !
116 !
117 !* 0.2 Declarations of local variables
118 ! -------------------------------
119 !
120 INTEGER :: ilon, ilat
121 INTEGER :: il
122 REAL(KIND=JPRB) :: zhook_handle
123 !-------------------------------------------------------------------------------
124 IF (lhook) CALL dr_hook('MODE_GRIDTYPE_LONLAT_REG:GET_GRIDTYPE_LONLAT_REG',0,zhook_handle)
125 ilon = nint(pgrid_par(5))
126 ilat = nint(pgrid_par(6))
127 il = nint(pgrid_par(7))
128 !
129 IF (present(plonmin)) plonmin = pgrid_par(1)
130 IF (present(plonmax)) plonmax = pgrid_par(2)
131 IF (present(platmin)) platmin = pgrid_par(3)
132 IF (present(platmax)) platmax = pgrid_par(4)
133 IF (present(klon )) klon = ilon
134 IF (present(klat )) klat = ilat
135 IF (present(kl )) kl = il
136 IF (present(plon )) plon(:) = pgrid_par(8:7+il)
137 IF (present(plat )) plat(:) = pgrid_par(8+il:7+2*il)
138 IF (lhook) CALL dr_hook('MODE_GRIDTYPE_LONLAT_REG:GET_GRIDTYPE_LONLAT_REG',1,zhook_handle)
139 !
140 !-------------------------------------------------------------------------------
141 END SUBROUTINE get_gridtype_lonlat_reg
142 !---------------------------------------------------------------------------------
143 !
144 ! ###################################################
145  SUBROUTINE latlon_lonlat_reg(PLONMIN,PLONMAX,PLATMIN,PLATMAX,&
146  klon,klat,plon,plat )
147 ! ###################################################
148 !
149 !!**** *LATLON_LONLAT_REG * - Routine to compute geographical coordinates
150 !!
151 !! PURPOSE
152 !! -------
153 !!
154 !! AUTHOR
155 !! ------
156 !! V. Masson *Meteo-France*
157 !!
158 !! MODIFICATION
159 !! ------------
160 !! Original 03/2004
161 !-------------------------------------------------------------------------------
162 !
163 !* 0. DECLARATIONS
164 ! ------------
165 !
166 IMPLICIT NONE
167 !
168 !* 0.1 Declarations of arguments and results
169 !
170 REAL, INTENT(IN) :: plonmin ! minimum longitude
171 REAL, INTENT(IN) :: plonmax ! maximum longitude
172 REAL, INTENT(IN) :: platmin ! minimum latitude
173 REAL, INTENT(IN) :: platmax ! maximum latitude
174 INTEGER, INTENT(IN) :: klon ! number of points in longitude
175 INTEGER, INTENT(IN) :: klat ! number of points in latitude
176 REAL, DIMENSION(:), INTENT(OUT) :: plon,plat
177  ! returned geographic latitudes and
178  ! longitudes of the processed points
179  ! (degrees).
180 !
181 !* 0.2 Declarations of local variables
182 !
183 INTEGER :: jlon, jlat
184 INTEGER :: jl
185 INTEGER :: jc
186 REAL(KIND=JPRB) :: zhook_handle
187 !--------------------------------------------------------------------------------
188 !
189 IF (lhook) CALL dr_hook('MODE_GRIDTYPE_LONLAT_REG:LATLON_LONLAT_REG',0,zhook_handle)
190 jl = 0
191 !
192 DO jlat=1,klat
193  DO jlon=1,klon
194  jc = jlon + (jlat-1) * klon
195  jl = jl + 1
196  plon(jl) = plonmin + (plonmax-plonmin) * (float(jlon)-0.5) / float(klon)
197  plat(jl) = platmin + (platmax-platmin) * (float(jlat)-0.5) / float(klat)
198  END DO
199 END DO
200 IF (lhook) CALL dr_hook('MODE_GRIDTYPE_LONLAT_REG:LATLON_LONLAT_REG',1,zhook_handle)
201 !---------------------------------------------------------------------------------
202 END SUBROUTINE latlon_lonlat_reg
203 !---------------------------------------------------------------------------------
204 !
205 !############################################################################
206 !############################################################################
207 !############################################################################
208 !############################################################################
209 !############################################################################
210 !############################################################################
211 !
212 END MODULE mode_gridtype_lonlat_reg
subroutine latlon_lonlat_reg(PLONMIN, PLONMAX, PLATMIN, PLATMAX, KLON, KLAT, PLON, PLAT)
subroutine get_gridtype_lonlat_reg(PGRID_PAR, PLONMIN, PLONMAX, PLATMIN, PLATMAX, KLON, KLAT, KL, PLON, PLAT)
subroutine put_gridtype_lonlat_reg(PGRID_PAR, PLONMIN, PLONMAX, PLATMIN, PLATMAX, KLON, KLAT, KL, PLON, PLAT)