d7e1e4ed5adf0a1f2e7cb3eb07207e5feb769715
[MNH-git_open_source-lfs.git] / src / MNH / read_hgrid.f90
1 !MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
3 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
4 !MNH_LIC for details. version 1.
5 !-----------------------------------------------------------------
6 !--------------- special set of characters for RCS information
7 !-----------------------------------------------------------------
8 ! $Source$ $Revision$
9 ! MASDEV4_7 init 2006/05/18 13:07:25
10 !-----------------------------------------------------------------
11 !     ######################
12       MODULE MODI_READ_HGRID
13 !     ######################
14 INTERFACE
15       SUBROUTINE READ_HGRID(KMI,HFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE)
16 !
17 INTEGER,           INTENT(IN)  :: KMI          ! model index
18 CHARACTER (LEN=*), INTENT(IN)  :: HFMFILE     ! name of the file n
19 CHARACTER(LEN=28), INTENT(OUT) :: HMY_NAME     ! True Name of FM-file
20 CHARACTER(LEN=28), INTENT(OUT) :: HDAD_NAME    ! Name of father
21 CHARACTER(LEN=2) , INTENT(OUT) :: HSTORAGE_TYPE
22 !
23 END SUBROUTINE READ_HGRID
24 END INTERFACE
25 END MODULE MODI_READ_HGRID
26 !
27 !     ####################################################################
28       SUBROUTINE READ_HGRID(KMI,HFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE)
29 !     ####################################################################
30 !
31 !!****  *READ_HGRID* - to read grid information in FM file into PGD modules
32 !!                     (KMI==0) or for model KMI
33 !!
34 !!    PURPOSE
35 !!    -------
36 !!
37 !!    CAUTION : if used to fill the MODD_PGD... modules, the projection
38 !!              definition module MODD_GRID will be eraised without test:
39 !!              In this case (KMI==0), it is used to define the
40 !!              projection.
41 !!
42 !!**  METHOD
43 !!    ------
44 !!
45 !!    EXTERNAL
46 !!    --------
47 !!      FMREAD   : to read data in LFIFM file
48 !!
49 !!    IMPLICIT ARGUMENTS
50 !!    ------------------
51 !!      Module MODD_GRID : contains projection definition
52 !!        XLAT0
53 !!        XLON0
54 !!        XRPK
55 !!        XBETA
56 !!        XLATORI
57 !!        XLONORI
58 !!      Module MODD_GRID$n : contains domain definition
59 !!        XXHAT
60 !!        XYHAT
61 !!      Module MODD_DIM$n : contains domain size
62 !!        NIMAX
63 !!        NJMAX
64 !!      Module MODD_PARAMETERS :
65 !!        JPHEXT
66 !!      Module MODD_LUNIT :
67 !!        CLUOUT0
68 !!
69 !!    REFERENCE
70 !!    ---------
71 !!      Book2 of the documentation
72 !!
73 !!
74 !!    AUTHOR
75 !!    ------
76 !!      V. Masson       * Meteo France *
77 !!
78 !!    MODIFICATIONS
79 !!    -------------
80 !!      Original        26/09/96
81 !!            M.Faivre      2014
82 !-------------------------------------------------------------------------------
83 !
84 !*       0.    DECLARATIONS
85 !
86 USE MODE_MODELN_HANDLER
87 USE MODI_READ_HGRID_n
88 !
89 USE MODD_PGDDIM
90 USE MODD_PGDGRID
91 USE MODD_GRID
92 USE MODD_PARAMETERS
93 USE MODD_LUNIT
94 !
95 USE MODE_FMREAD
96 USE MODE_GRIDPROJ
97 USE MODE_IO_ll
98 USE MODD_CONF, ONLY : CPROGRAM
99 !
100 IMPLICIT NONE
101 !
102 !*       0.1   declarations of arguments
103 !
104 INTEGER,           INTENT(IN)  :: KMI          ! model index
105 CHARACTER (LEN=*), INTENT(IN)  :: HFMFILE     ! name of the file n
106 CHARACTER(LEN=28), INTENT(OUT) :: HMY_NAME     ! True Name of FM-file
107 CHARACTER(LEN=28), INTENT(OUT) :: HDAD_NAME    ! Name of father
108 CHARACTER(LEN=2) , INTENT(OUT) :: HSTORAGE_TYPE
109 !
110 !
111 !*       0.2   declarations of local variables
112 !
113 CHARACTER(LEN=LEN_HREC)      :: YRECFM
114 INTEGER                :: IGRID,ILENCH,IRESP
115 CHARACTER(LEN=100)     :: YCOMMENT
116 INTEGER                :: IMASDEV
117 INTEGER                :: IMI
118 LOGICAL                :: G1D,G2D,GPACK
119 INTEGER                :: IINFO_ll
120 !-------------------------------------------------------------------------------
121 REAL :: ZLATOR, ZLONOR, ZXHATM, ZYHATM
122 !-------------------------------------------------------------------------------
123 !
124 !*       1.     TEST ON MODEL INDEX
125 !               -------------------
126 !
127 ! KMI may be 0 !
128 IF (KMI<0 .OR. KMI>JPMODELMAX) THEN
129    !callabortstop
130   CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
131   CALL ABORT
132   STOP
133 ENDIF
134 IF (KMI/=0) THEN
135   IMI = GET_CURRENT_MODEL_INDEX()
136   CALL GOTO_MODEL(KMI)
137   CALL GO_TOMODEL_ll(KMI, IINFO_ll)
138   CALL READ_HGRID_n(HFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE)
139   CALL GO_TOMODEL_ll(IMI, IINFO_ll)
140   CALL GOTO_MODEL(IMI)
141   RETURN
142 END IF
143 !
144 !*       2.     READING IN MODD_PGD...
145 !               ----------------------
146 !
147 !*       2.1    General information :
148 !               -------------------
149 !
150 YRECFM='MY_NAME'
151 YCOMMENT=' '
152 IGRID=0
153 ILENCH=LEN(YCOMMENT)
154 CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',HMY_NAME,IGRID,ILENCH,YCOMMENT,IRESP)
155 !
156 YRECFM='DAD_NAME'
157 YCOMMENT=' '
158 IGRID=0
159 ILENCH=LEN(YCOMMENT)
160 CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',HDAD_NAME,IGRID,ILENCH,YCOMMENT,IRESP)
161 !
162 YRECFM='STORAGE_TYPE'
163 YCOMMENT=' '
164 IGRID=0
165 ILENCH=LEN(YCOMMENT)
166 CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',HSTORAGE_TYPE,IGRID,ILENCH,YCOMMENT,IRESP)
167 !
168 YRECFM='MASDEV'
169 CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP)
170 !
171 !
172 !*       2.2    Grid information :
173 !               ----------------
174 !
175 !20131010 recompute properly NPGDIMAX NPGDJMAX
176 !GET_DIM_PHYS_ll impact => 1st one no visible impact
177 CALL GET_DIM_PHYS_ll ( 'B',NPGDIMAX,NPGDJMAX)
178 !
179 CALL FMREAD(HFMFILE,'LAT0',CLUOUT0,'--',XLAT0,IGRID,ILENCH,YCOMMENT,IRESP)
180 CALL FMREAD(HFMFILE,'LON0',CLUOUT0,'--',XLON0,IGRID,ILENCH,YCOMMENT,IRESP)
181 CALL FMREAD(HFMFILE,'RPK',CLUOUT0,'--',XRPK,IGRID,ILENCH,YCOMMENT,IRESP)
182 CALL FMREAD(HFMFILE,'BETA',CLUOUT0,'--',XBETA,IGRID,ILENCH,YCOMMENT,IRESP)
183 CALL FMREAD(HFMFILE,'LATORI',CLUOUT0,'--',XPGDLATOR,IGRID,ILENCH,YCOMMENT,IRESP)
184 CALL FMREAD(HFMFILE,'LONORI',CLUOUT0,'--',XPGDLONOR,IGRID,ILENCH,YCOMMENT,IRESP)
185 CALL FMREAD(HFMFILE,'IMAX',CLUOUT0,'--',NPGDIMAX,IGRID,ILENCH,YCOMMENT,IRESP)
186 CALL FMREAD(HFMFILE,'JMAX',CLUOUT0,'--',NPGDJMAX,IGRID,ILENCH,YCOMMENT,IRESP)
187 !
188 !20131010 recompute properly NPGDIMAX NPGDJMAX
189 !GET_DIM_PHYS_ll impact 2nd one => prevent run failures
190 CALL GET_DIM_PHYS_ll ( 'B',NPGDIMAX,NPGDJMAX)
191 !
192 IF (.NOT.(ALLOCATED(XPGDXHAT))) ALLOCATE(XPGDXHAT(NPGDIMAX+2*JPHEXT))
193 IF (.NOT.(ALLOCATED(XPGDYHAT))) ALLOCATE(XPGDYHAT(NPGDJMAX+2*JPHEXT))
194 !20131023 change FMREAD option '--' -> 'XX' ou 'YY' for // reading
195 CALL FMREAD(HFMFILE,'XHAT',CLUOUT0,'XX',XPGDXHAT,IGRID,ILENCH,YCOMMENT,IRESP)
196 CALL FMREAD(HFMFILE,'YHAT',CLUOUT0,'YY',XPGDYHAT,IGRID,ILENCH,YCOMMENT,IRESP)
197 !
198 !*       3.   Read the configuration (MODD_CONF)
199 !
200 CALL FMREAD(HFMFILE,'L1D',CLUOUT0,'--',G1D,IGRID,ILENCH,YCOMMENT,IRESP)
201 IF (IRESP/=0) THEN
202   G1D=.FALSE.
203   IF( (NPGDIMAX == 1).AND.(NPGDJMAX == 1) ) G1D=.TRUE.
204 ENDIF
205 !
206 CALL FMREAD(HFMFILE,'L2D',CLUOUT0,'--',G2D,IGRID,ILENCH,YCOMMENT,IRESP)
207 IF (IRESP/=0) THEN
208   G2D=.FALSE.
209   IF( (NPGDIMAX /= 1).AND.(NPGDJMAX == 1) ) G2D=.TRUE.
210 ENDIF
211 !
212 CALL FMREAD(HFMFILE,'PACK',CLUOUT0,'--',GPACK,IGRID,ILENCH,YCOMMENT,IRESP)
213 IF (IRESP/=0) GPACK=.TRUE.
214 !
215 CALL SET_FMPACK_ll(G1D,G2D,GPACK)
216 !-------------------------------------------------------------------------------
217 IF (IMASDEV<=45) THEN
218   CALL FMREAD(HFMFILE,'LATOR',CLUOUT0,'--',XPGDLATOR,IGRID,ILENCH,YCOMMENT,IRESP)
219   CALL FMREAD(HFMFILE,'LONOR',CLUOUT0,'--',XPGDLONOR,IGRID,ILENCH,YCOMMENT,IRESP)
220   ZXHATM = - 0.5 * (XPGDXHAT(1)+XPGDXHAT(2))
221   ZYHATM = - 0.5 * (XPGDYHAT(1)+XPGDYHAT(2))
222   CALL SM_LATLON(XPGDLATOR,XPGDLONOR,ZXHATM,ZYHATM,ZLATOR,ZLONOR)
223   XPGDLATOR = ZLATOR
224   XPGDLONOR = ZLONOR
225 END IF
226 !-------------------------------------------------------------------------------
227 !
228 END SUBROUTINE READ_HGRID