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