SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
read_gridtype.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_gridtype (&
7  hprogram,hgrid,kgrid_par,klu,oread,pgrid_par,kresp,hdir)
8 ! #########################################
9 !
10 !!**** *READ_GRID* - routine to initialise the horizontal grid of a scheme
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !!
29 !! AUTHOR
30 !! ------
31 !! V. Masson *Meteo France*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 01/2003
36 !! 10/2007 E. Martin IGN Grids
37 !! 12/2012 P. Samuelsson Rotated lonlat
38 !-------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
43 !
44 !
45 !
46 !
47 USE yomhook ,ONLY : lhook, dr_hook
48 USE parkind1 ,ONLY : jprb
49 !
50 USE modi_read_gridtype_cartesian
51 !
52 USE modi_read_gridtype_conf_proj
53 !
54 USE modi_read_gridtype_gauss
55 !
56 USE modi_read_gridtype_ign
57 !
58 USE modi_read_gridtype_lonlat_reg
59 !
60 USE modi_read_gridtype_lonlatval
61 !
62 USE modi_read_gridtype_lonlat_rot
63 IMPLICIT NONE
64 !
65 !* 0.1 Declarations of arguments
66 ! -------------------------
67 !
68 !
69 !
70  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
71  CHARACTER(LEN=10), INTENT(IN) :: hgrid ! type of horizontal grid
72 INTEGER, INTENT(INOUT) :: kgrid_par ! size of PGRID_PAR
73 INTEGER, INTENT(IN) :: klu ! number of points
74 LOGICAL, INTENT(IN) :: oread ! flag to read the grid
75 REAL, DIMENSION(:), OPTIONAL, INTENT(OUT) :: pgrid_par ! parameters defining this grid
76 INTEGER, OPTIONAL, INTENT(OUT) :: kresp ! error return code
77  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: hdir ! reading directive ('A': all field;'H': this proc)
78 !
79 !* 0.2 Declarations of local variables
80 ! -------------------------------
81 !
82 REAL, DIMENSION(:), ALLOCATABLE :: zgrid_par
83 INTEGER :: igrid_par
84 INTEGER :: iresp
85  CHARACTER(LEN=1) :: ydir
86 REAL(KIND=JPRB) :: zhook_handle
87 !
88 !---------------------------------------------------------------------------
89 !
90 IF (lhook) CALL dr_hook('READ_GRIDTYPE',0,zhook_handle)
91 IF (oread) THEN
92  igrid_par = kgrid_par
93 ELSE
94  igrid_par = 0
95 END IF
96 !
97 IF (present(hdir)) THEN
98  ydir = hdir
99 ELSE
100  ydir = 'H'
101 END IF
102 !
103 ALLOCATE(zgrid_par(igrid_par))
104 !
105 SELECT CASE (hgrid)
106  CASE("NONE ")
107  DEALLOCATE(zgrid_par)
108  IF (lhook) CALL dr_hook('READ_GRIDTYPE',1,zhook_handle)
109  RETURN
110 
111  CASE ("CONF PROJ ")
113  hprogram,kgrid_par,klu,oread,igrid_par,zgrid_par,iresp,ydir)
114 
115  CASE ("CARTESIAN ")
117  hprogram,kgrid_par,klu,oread,igrid_par,zgrid_par,iresp,ydir)
118 
119  CASE ("LONLAT REG")
121  hprogram,kgrid_par,klu,oread,igrid_par,zgrid_par,iresp,ydir)
122 
123  CASE ("GAUSS ")
124  CALL read_gridtype_gauss(&
125  hprogram,kgrid_par,klu,oread,igrid_par,zgrid_par,iresp,ydir)
126 
127  CASE ("IGN ")
128  CALL read_gridtype_ign(&
129  hprogram,kgrid_par,klu,oread,igrid_par,zgrid_par,iresp,ydir)
130 
131  CASE ("LONLATVAL ")
133  hprogram,kgrid_par,klu,oread,igrid_par,zgrid_par,iresp,ydir)
134 
135  CASE ("LONLAT ROT")
137  hprogram,kgrid_par,klu,oread,igrid_par,zgrid_par,iresp,ydir)
138 
139 END SELECT
140 !
141 IF (oread) pgrid_par = zgrid_par
142 !
143 IF (present(kresp)) kresp = iresp
144 !
145 DEALLOCATE(zgrid_par)
146 IF (lhook) CALL dr_hook('READ_GRIDTYPE',1,zhook_handle)
147 !---------------------------------------------------------------------------
148 !
149 END SUBROUTINE read_gridtype
subroutine read_gridtype_lonlat_reg(HPROGRAM, KGRID_PAR, KLU, OREAD, KSIZE, PGRID_PAR, KRESP, HDIR)
subroutine read_gridtype_conf_proj(HPROGRAM, KGRID_PAR, KLU, OREAD, KSIZE, PGRID_PAR, KRESP, HDIR)
subroutine read_gridtype(HPROGRAM, HGRID, KGRID_PAR, KLU, OREAD, PGRID_PAR, KRESP, HDIR)
subroutine read_gridtype_lonlat_rot(HPROGRAM, KGRID_PAR, KLU, OREAD, KSIZE, PGRID_PAR, KRESP, HDIR)
subroutine read_gridtype_ign(HPROGRAM, KGRID_PAR, KLU, OREAD, KSIZE, PGRID_PAR, KRESP, HDIR)
subroutine read_gridtype_lonlatval(HPROGRAM, KGRID_PAR, KLU, OREAD, KSIZE, PGRID_PAR, KRESP, HDIR)
subroutine read_gridtype_gauss(HPROGRAM, KGRID_PAR, KLU, OREAD, KSIZE, PGRID_PAR, KRESP, HDIR)
subroutine read_gridtype_cartesian(HPROGRAM, KGRID_PAR, KLU, OREAD, KSIZE, PGRID_PAR, KRESP, HDIR)