6d9ce98d2899be762c0ab55ce7415379eb6a1f5a
[MNH-git_open_source-lfs.git] / src / SURFEX / prep_grid_lonlat_reg.F90
1 !SURFEX_LIC Copyright 1994-2014 Meteo-France 
2 !SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C  licence
3 !SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SURFEX_LIC for details. version 1.
5 !     #########
6       SUBROUTINE PREP_GRID_LONLAT_REG(HFILETYPE,HINTERP_TYPE,KNI)
7 !     ##########################################################################
8 !
9 !!****  *PREP_GRID_LATLON* - reads EXTERNALIZED Surface grid.
10 !!
11 !!    PURPOSE
12 !!    -------
13 !!
14 !!**  METHOD
15 !!    ------
16 !!
17 !!    EXTERNAL
18 !!    --------
19 !!
20 !!    IMPLICIT ARGUMENTS
21 !!    ------------------
22 !!
23 !!
24 !!    REFERENCE
25 !!    ---------
26 !!
27 !!
28 !!    AUTHOR
29 !!    ------
30 !!
31 !!      V. Masson
32 !!
33 !!    MODIFICATIONS
34 !!    -------------
35 !!      Original   06/2003
36 !-------------------------------------------------------------------------------
37 !
38 !*      0. DECLARATIONS
39 !          ------------
40 !
41 USE MODI_READ_SURF
42 !
43 USE MODD_GRID_LATLONREGUL, ONLY : XILAT1,XILON1,XILAT2,XILON2,NINLAT,NINLON,NILENGTH,XILATARRAY
44 !
45 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
46 USE PARKIND1  ,ONLY : JPRB
47 !
48 IMPLICIT NONE
49 !
50 !* 0.1. Declaration of arguments
51 !       ------------------------
52 !
53  CHARACTER(LEN=6),  INTENT(IN)    :: HFILETYPE    ! file type
54  CHARACTER(LEN=6),  INTENT(OUT)   :: HINTERP_TYPE ! Grid type
55 INTEGER,           INTENT(OUT)   :: KNI          ! number of points
56 !
57 !* 0.2 Declaration of local variables
58 !      ------------------------------
59 !
60  CHARACTER(LEN=12) :: YRECFM    ! Name of the article to be read
61 INTEGER           :: IRESP
62 !
63 INTEGER :: JL        ! loop counter
64 INTEGER :: ILON
65 REAL :: ZDLAT, ZDLON
66 REAL(KIND=JPRB) :: ZHOOK_HANDLE
67 !-----------------------------------------------------------------------
68 !
69 !*   1 Projection
70 !      ----------
71 !
72 IF (LHOOK) CALL DR_HOOK('PREP_GRID_LONLAT_REG',0,ZHOOK_HANDLE)
73 YRECFM = 'LONMIN'
74  CALL READ_SURF(HFILETYPE,YRECFM,XILON1,IRESP)
75 YRECFM = 'LONMAX'
76  CALL READ_SURF(HFILETYPE,YRECFM,XILON2,IRESP)
77 YRECFM = 'LATMIN'
78  CALL READ_SURF(HFILETYPE,YRECFM,XILAT1,IRESP)
79 YRECFM = 'LATMAX'
80  CALL READ_SURF(HFILETYPE,YRECFM,XILAT2,IRESP)
81 YRECFM = 'NLAT'
82  CALL READ_SURF(HFILETYPE,YRECFM,NINLAT,IRESP)
83 !
84 IF (ALLOCATED(NINLON)) DEALLOCATE(NINLON)
85 ALLOCATE(NINLON(NINLAT))
86 YRECFM = 'NLON'
87  CALL READ_SURF(HFILETYPE,YRECFM,NINLON(1),IRESP)
88 IF (NINLAT.GT.1) NINLON(2:NINLAT) = NINLON(1)
89 !
90 !-----------------------------------------------------------------------
91 !
92 !*   3 Computes additional quantities used in interpolation
93 !      ----------------------------------------------------
94 !
95 NILENGTH = NINLAT*NINLON(1)
96 KNI = NILENGTH
97 !
98 ZDLAT = (XILAT2-XILAT1)/NINLAT
99 ZDLON = (XILON2-XILON1)/NINLON(1)
100 !
101 XILON1 = XILON1 + ZDLON/2.
102 XILON2 = XILON2 - ZDLON/2.
103 XILAT1 = XILAT1 + ZDLAT/2.
104 XILAT2 = XILAT2 - ZDLAT/2.
105 !
106 IF (ALLOCATED(XILATARRAY)) DEALLOCATE(XILATARRAY)
107 ALLOCATE(XILATARRAY(NINLAT))
108 !
109 XILATARRAY(1)=XILAT1
110 DO JL = 2,NINLAT
111   XILATARRAY(JL) = XILATARRAY(JL-1) + ZDLAT
112 ENDDO
113 !
114 !-----------------------------------------------------------------------
115 HINTERP_TYPE = 'HORIBL'
116 IF (LHOOK) CALL DR_HOOK('PREP_GRID_LONLAT_REG',1,ZHOOK_HANDLE)
117 !-----------------------------------------------------------------------
118 !
119 END SUBROUTINE PREP_GRID_LONLAT_REG