SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
grid_modif.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 grid_modif(KLUOUT,KLUNAM,HGRID,KGRID_PAR,PGRID_PAR,KL)
7 ! ##########################################################
8 !!
9 !! PURPOSE
10 !! -------
11 !! Reads in namelist the grid type and parameters.
12 !!
13 !! METHOD
14 !! ------
15 !!
16 !! EXTERNAL
17 !! --------
18 !!
19 !!
20 !! IMPLICIT ARGUMENTS
21 !! ------------------
22 !!
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !! AUTHOR
28 !! ------
29 !!
30 !! V. Masson Meteo-France
31 !!
32 !! MODIFICATION
33 !! ------------
34 !!
35 !! Original 01/2004
36 !! J.Escobar 09/02/05 bug init IGRID_PAR
37 !----------------------------------------------------------------------------
38 !
39 !* 0. DECLARATION
40 ! -----------
41 !
42 !
43 USE yomhook ,ONLY : lhook, dr_hook
44 USE parkind1 ,ONLY : jprb
45 !
46 USE modi_grid_modif_cartesian
47 !
48 USE modi_grid_modif_conf_proj
49 !
50 IMPLICIT NONE
51 !
52 !* 0.1 Declaration of dummy arguments
53 ! ------------------------------
54 !
55 INTEGER, INTENT(IN) :: kluout ! output listing logical unit
56 INTEGER, INTENT(IN) :: klunam ! namelist file logical unit
57  CHARACTER(LEN=10), INTENT(IN) :: hgrid ! type of horizontal grid
58 INTEGER, INTENT(INOUT):: kgrid_par ! size of PGRID_PAR
59 REAL, DIMENSION(:), POINTER :: pgrid_par ! parameters defining this grid
60 INTEGER, INTENT(INOUT):: kl ! number of points
61 !
62 !
63 !* 0.2 Declaration of local variables
64 ! ------------------------------
65 !
66 INTEGER :: igrid_par ! modified grid vector size
67 INTEGER :: il ! number of points in modified grid
68 REAL, DIMENSION(:), ALLOCATABLE :: zgrid_par ! modified grid vector
69 REAL(KIND=JPRB) :: zhook_handle
70 !------------------------------------------------------------------------------
71 !
72 IF (lhook) CALL dr_hook('GRID_MODIF',0,zhook_handle)
73 !
74 IF (hgrid=="NONE ".OR.hgrid=="LONLAT REG".OR.hgrid=="GAUSS ".OR.&
75  hgrid=="LONLATVAL ") THEN
76  IF (lhook) CALL dr_hook('GRID_MODIF',1,zhook_handle)
77  RETURN
78 END IF
79 !
80 igrid_par = 0
81 ALLOCATE(zgrid_par(0))
82  CALL grid_modification(kluout,klunam,hgrid,kgrid_par,kl,pgrid_par,igrid_par,il,.false.,zgrid_par)
83 DEALLOCATE(zgrid_par)
84 !
85 ALLOCATE(zgrid_par(igrid_par))
86  CALL grid_modification(kluout,klunam,hgrid,kgrid_par,kl,pgrid_par,igrid_par,il,.true.,zgrid_par)
87 !
88 DEALLOCATE(pgrid_par)
89 !
90 kgrid_par = igrid_par
91 kl = il
92 ALLOCATE(pgrid_par(kgrid_par))
93 pgrid_par = zgrid_par
94 !
95 DEALLOCATE(zgrid_par)
96 !-------------------------------------------------------------------------------
97 !-------------------------------------------------------------------------------
98 !-------------------------------------------------------------------------------
99 IF (lhook) CALL dr_hook('GRID_MODIF',1,zhook_handle)
100  CONTAINS
101 !-------------------------------------------------------------------------------
102 !-------------------------------------------------------------------------------
103 !-------------------------------------------------------------------------------
104 ! ##########################################################
105  SUBROUTINE grid_modification(KLUOUT,KLUNAM,HGRID,KGRID_PAR,KL,PGRID_PAR, &
106  kgrid_par2,kl2,omodif,pgrid_par2 )
107 ! ##########################################################
108 !!
109 !! PURPOSE
110 !! -------
111 !! Modification of grid parameters
112 !!
113 !! METHOD
114 !! ------
115 !!
116 !! EXTERNAL
117 !! --------
118 !!
119 !!
120 !! IMPLICIT ARGUMENTS
121 !! ------------------
122 !!
123 !!
124 !! REFERENCE
125 !! ---------
126 !!
127 !! AUTHOR
128 !! ------
129 !!
130 !! V. Masson Meteo-France
131 !!
132 !! MODIFICATION
133 !! ------------
134 !!
135 !! Original 01/2004
136 !----------------------------------------------------------------------------
137 !
138 !* 0. DECLARATION
139 ! -----------
140 !
141 IMPLICIT NONE
142 !
143 !* 0.1 Declaration of dummy arguments
144 ! ------------------------------
145 !
146 INTEGER, INTENT(IN) :: kluout ! output listing logical unit
147 INTEGER, INTENT(IN) :: klunam ! namelist file logical unit
148  CHARACTER(LEN=10), INTENT(IN) :: hgrid ! type of horizontal grid
149 INTEGER, INTENT(IN) :: kl ! number of points
150 INTEGER, INTENT(IN) :: kgrid_par ! size of PGRID_PAR
151 REAL, DIMENSION(:), INTENT(IN) :: pgrid_par ! parameters defining the grid
152 INTEGER, INTENT(INOUT) :: kl2 ! number of points in modified grid
153 INTEGER, INTENT(INOUT) :: kgrid_par2 ! size of PGRID_PAR2
154 LOGICAL, INTENT(IN) :: omodif ! flag to modify the grid
155 REAL, DIMENSION(:), OPTIONAL, INTENT(OUT) :: pgrid_par2 ! parameters defining the modified grid
156 !
157 !
158 !* 0.2 Declaration of local variables
159 ! ------------------------------
160 !
161 INTEGER :: igrid_par2
162 REAL, DIMENSION(:), ALLOCATABLE :: zgrid_par2
163 REAL(KIND=JPRB) :: zhook_handle
164 !
165 !------------------------------------------------------------------------------
166 !
167 IF (lhook) CALL dr_hook('GRID_MODIFICATION',0,zhook_handle)
168 IF (omodif) THEN
169  igrid_par2 = kgrid_par2
170 ELSE
171  igrid_par2 = 0
172 END IF
173 !
174 ALLOCATE(zgrid_par2(igrid_par2))
175 !
176 SELECT CASE (hgrid)
177  CASE ("CONF PROJ ")
178  CALL grid_modif_conf_proj(kluout,klunam,kgrid_par,kl,pgrid_par, &
179  kgrid_par2,kl2,omodif,zgrid_par2 )
180 
181  CASE ("CARTESIAN ")
182  CALL grid_modif_cartesian(kluout,klunam,kgrid_par,kl,pgrid_par, &
183  kgrid_par2,kl2,omodif,zgrid_par2 )
184 
185 END SELECT
186 !
187 IF (omodif) pgrid_par2 = zgrid_par2
188 !
189 DEALLOCATE(zgrid_par2)
190 IF (lhook) CALL dr_hook('GRID_MODIFICATION',1,zhook_handle)
191 !
192 END SUBROUTINE grid_modification
193 !
194 !-------------------------------------------------------------------------------
195 !-------------------------------------------------------------------------------
196 !-------------------------------------------------------------------------------
197 !
198 END SUBROUTINE grid_modif
subroutine grid_modification(KLUOUT, KLUNAM, HGRID, KGRID_PAR, KL, PGRID_PAR, KGRID_PAR2, KL2, OMODIF, PGRID_PAR2)
Definition: grid_modif.F90:105
subroutine grid_modif_conf_proj(KLUOUT, KLUNAM, KGRID_PAR, KL, PGRID_PAR, KGRID_PAR2, KL2, OMODIF, PGRID_PAR2)
subroutine grid_modif_cartesian(KLUOUT, KLUNAM, KGRID_PAR, KL, PGRID_PAR, KGRID_PAR2, KL2, OMODIF, PGRID_PAR2)
subroutine grid_modif(KLUOUT, KLUNAM, HGRID, KGRID_PAR, PGRID_PAR, KL)
Definition: grid_modif.F90:6