SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
read_nam_grid_lonlatval.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 read_nam_grid_lonlatval(HPROGRAM,KGRID_PAR,KL,PGRID_PAR)
7 ! ################################################################
8 !
9 !!**** *READ_NAM_GRID_LONLATVAL* - routine to read in namelist the horizontal grid
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !!** METHOD
15 !! ------
16 !!
17 !! EXTERNAL
18 !! --------
19 !!
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !!
28 !! AUTHOR
29 !! ------
30 !! E. Martin *Meteo France*
31 !!
32 !! MODIFICATIONS
33 !! -------------
34 !! Original 10/2007
35 !-------------------------------------------------------------------------------
36 !
37 !* 0. DECLARATIONS
38 ! ------------
39 !
40 USE mode_pos_surf
41 !
42 USE modi_open_namelist
43 USE modi_close_namelist
44 USE modi_get_luout
45 !
47 !
48 USE yomhook ,ONLY : lhook, dr_hook
49 USE parkind1 ,ONLY : jprb
50 !
51 IMPLICIT NONE
52 !
53 !* 0.1 Declarations of arguments
54 ! -------------------------
55 !
56  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
57 INTEGER, INTENT(INOUT) :: kgrid_par ! size of PGRID_PAR
58 INTEGER, INTENT(OUT) :: kl ! number of points
59 REAL, DIMENSION(KGRID_PAR), INTENT(OUT) :: pgrid_par ! parameters defining this grid
60 !
61 !* 0.2 Declarations of local variables
62 ! -------------------------------
63 !
64 INTEGER :: iluout ! output listing logical unit
65 INTEGER :: ilunam ! namelist file logical unit
66 
67 REAL, DIMENSION(:), ALLOCATABLE :: zx ! X conformal coordinate of grid mesh
68 REAL, DIMENSION(:), ALLOCATABLE :: zy ! Y conformal coordinate of grid mesh
69 REAL, DIMENSION(:), ALLOCATABLE :: zdx ! X grid mesh size
70 REAL, DIMENSION(:), ALLOCATABLE :: zdy ! Y grid mesh size
71 !
72 !* 0.3 Declarations of namelist
73 ! ------------------------
74 !
75 INTEGER :: npoints ! number of points
76 REAL, DIMENSION(100000) :: xx ! X coordinate of grid mesh center (in meters)
77 REAL, DIMENSION(100000) :: xy ! Y coordinate of grid mesh center (in meters)
78 REAL, DIMENSION(100000) :: xdx ! X mesh size (in meters)
79 REAL, DIMENSION(100000) :: xdy ! Y mesh size (in meters)
80 !
81 REAL, DIMENSION(:), POINTER :: zgrid_par
82 !
83 LOGICAL :: gfound
84 REAL(KIND=JPRB) :: zhook_handle
85 !
86 namelist/nam_lonlatval/npoints,xx,xy,xdx,xdy
87 !
88 !------------------------------------------------------------------------------
89 !
90 !* 1. opening of namelist
91 !
92 IF (lhook) CALL dr_hook('READ_NAM_GRID_LONLATVAL',0,zhook_handle)
93  CALL get_luout(hprogram,iluout)
94 !
95  CALL open_namelist(hprogram,ilunam)
96 !
97 !---------------------------------------------------------------------------
98 !
99 !* 2. Reading of projection parameters
100 ! --------------------------------
101 !
102  CALL posnam(ilunam,'NAM_LONLATVAL',gfound,iluout)
103 IF (gfound) READ(unit=ilunam,nml=nam_lonlatval)
104 !
105 !---------------------------------------------------------------------------
106  CALL close_namelist(hprogram,ilunam)
107 !---------------------------------------------------------------------------
108 !
109 !* 3. Number of points
110 ! ----------------
111 !
112 kl = npoints
113 !
114 !---------------------------------------------------------------------------
115 !
116 !* 3. Array of X and Y coordinates
117 ! ----------------------------
118 !
119 !
120 ALLOCATE(zx(kl))
121 ALLOCATE(zy(kl))
122 zx(:) = xx(:kl)
123 zy(:) = xy(:kl)
124 !
125 !---------------------------------------------------------------------------
126 !
127 !* 4. Array of X and Y increments
128 ! ---------------------------
129 !
130 ALLOCATE(zdx(kl))
131 ALLOCATE(zdy(kl))
132 zdx(:) = xdx(:kl)
133 zdy(:) = xdy(:kl)
134 !
135 !---------------------------------------------------------------------------
136 !
137 !* 8. All this information stored into pointer PGRID_PAR
138 ! --------------------------------------------------
139 !
140  CALL put_gridtype_lonlatval(zgrid_par,zx,zy,zdx,zdy)
141 !
142 !---------------------------------------------------------------------------
143 DEALLOCATE(zx)
144 DEALLOCATE(zy)
145 DEALLOCATE(zdx)
146 DEALLOCATE(zdy)
147 !---------------------------------------------------------------------------
148 !
149 !* 1st call : initializes dimension
150 !
151 IF (kgrid_par==0) THEN
152  kgrid_par = SIZE(zgrid_par)
153 !
154 ELSE
155 !
156 !* 2nd call : initializes grid array
157 !
158  pgrid_par(:) = 0.
159  pgrid_par(:) = zgrid_par
160 END IF
161 !
162 DEALLOCATE(zgrid_par)
163 IF (lhook) CALL dr_hook('READ_NAM_GRID_LONLATVAL',1,zhook_handle)
164 !
165 !---------------------------------------------------------------------------
166 !
167 END SUBROUTINE read_nam_grid_lonlatval
subroutine put_gridtype_lonlatval(PGRID_PAR, PX, PY, PDX, PDY)
subroutine read_nam_grid_lonlatval(HPROGRAM, KGRID_PAR, KL, PGRID_PAR)
subroutine close_namelist(HPROGRAM, KLUNAM)
subroutine posnam(KULNAM, HDNAML, OFOUND, KLUOUT)
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:6
subroutine open_namelist(HPROGRAM, KLUNAM, HFILE)