SURFEX v8.1
General documentation of Surfex
grid_from_file.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_from_file (U,GCP,PGRID_FULL_PAR,HPROGRAM,HFILE,HFILETYPE,&
7  OGRID,HGRID,KGRID_PAR,PGRID_PAR,KL,HDIR)
8 ! ##########################################################
9 !!
10 !! PURPOSE
11 !! -------
12 !! Reads in namelist the grid type and parameters.
13 !!
14 !! METHOD
15 !! ------
16 !!
17 !! EXTERNAL
18 !! --------
19 !!
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !! AUTHOR
29 !! ------
30 !!
31 !! V. Masson Meteo-France
32 !!
33 !! MODIFICATION
34 !! ------------
35 !!
36 !! Original 01/2004
37 !! M.Moge 02/2015 Parallelization of spawning
38 !! M.Moge 04/2015 Parallelization of prep_pgd on son model
39 !----------------------------------------------------------------------------
40 !
41 !* 0. DECLARATION
42 ! -----------
43 !
44 USE modd_surf_atm_n, ONLY : surf_atm_t
46 !
47 USE modd_surfex_mpi, ONLY : nrank, nsize_task
48 !
49 #ifdef MNH_PARALLEL
50 USE mode_tools_ll, ONLY : get_dim_phys_ll
51 #endif
52 !
53 USE modi_read_nam_gridtype
54 USE modi_open_aux_io_surf
55 USE modi_read_gridtype
56 USE modi_close_aux_io_surf
58 USE modi_open_namelist
59 USE modi_close_namelist
60 USE modi_grid_modif
61 !
62 USE yomhook ,ONLY : lhook, dr_hook
63 USE parkind1 ,ONLY : jprb
64 !
65 USE modi_get_luout
66 IMPLICIT NONE
67 !
68 !* 0.1 Declaration of dummy arguments
69 ! ------------------------------
70 !
71 TYPE(surf_atm_t), INTENT(INOUT) :: U
72 TYPE(grid_conf_proj_t),INTENT(INOUT) :: GCP
73 !
74 REAL, DIMENSION(:), POINTER :: PGRID_FULL_PAR
75 !
76  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling the surface
77  CHARACTER(LEN=28), INTENT(IN) :: HFILE ! file name
78  CHARACTER(LEN=6), INTENT(IN) :: HFILETYPE ! file type
79 LOGICAL, INTENT(IN) :: OGRID ! .true. if grid is imposed by atm. model
80  CHARACTER(LEN=10), INTENT(OUT) :: HGRID ! type of horizontal grid
81 INTEGER, INTENT(OUT) :: KGRID_PAR ! size of PGRID_PAR
82 REAL, DIMENSION(:), POINTER :: PGRID_PAR ! parameters defining this grid
83 INTEGER, INTENT(OUT) :: KL ! number of points on processor
84  CHARACTER(LEN=1), INTENT(IN) :: HDIR
85 !
86 !
87 !* 0.2 Declaration of local variables
88 ! ------------------------------
89 !
90 INTEGER :: IIMAX
91 INTEGER :: IJMAX
92 INTEGER :: IIMAX_LOC
93 INTEGER :: IJMAX_LOC
94 INTEGER :: ILUOUT ! listing file logical unit
95 INTEGER :: ILUNAM ! namelist file logical unit
96 INTEGER :: IRESP ! return code
97 REAL(KIND=JPRB) :: ZHOOK_HANDLE
98 !
99 !* 0.3 Declaration of namelists
100 ! ------------------------
101 !
102 !------------------------------------------------------------------------------
103 !
104 !* 1. Defaults
105 ! --------
106 !
107 IF (lhook) CALL dr_hook('GRID_FROM_FILE',0,zhook_handle)
108  CALL get_luout(hprogram,iluout)
109 !
110 !---------------------------------------------------------------------------
111 !
112 !* 2. Opening of the file
113 ! -------------------
114 !
115 !---------------------------------------------------------------------------
116 !
117 !* 3. Number of points in this file
118 ! -----------------------------
119 !
120 IF (hdir/='H') THEN
121  !
122  CALL open_aux_io_surf(hfile,hfiletype,'FULL ',hdir=hdir)
123  !
124  CALL read_surf(hfiletype,'DIM_FULL ',kl,iresp,hdir=hdir)
125  u%NDIM_FULL = kl
126  !
127  !---------------------------------------------------------------------------
128  !
129  !* 4. Grid type
130  ! ---------
131  !
132  CALL read_surf(hfiletype,'GRID_TYPE',hgrid,iresp,hdir=hdir)
133  !
134  !---------------------------------------------------------------------------
135  !
136  !* 5. Reading parameters of the grid
137  ! ------------------------------
138  !
139 #ifdef MNH_PARALLEL
140  CALL read_surf(hprogram,'IMAX ',iimax, iresp,hdir='H')
141  CALL read_surf(hprogram,'JMAX ',ijmax, iresp,hdir='H')
142  u%NIMAX_SURF_ll = iimax
143  u%NJMAX_SURF_ll = ijmax
144  CALL get_dim_phys_ll('B',iimax_loc,ijmax_loc)
145  u%NSIZE_FULL = iimax_loc*ijmax_loc
146  kl = u%NSIZE_FULL
147  CALL read_gridtype(hfiletype,hgrid,kgrid_par,u%NSIZE_FULL,.false.,hdir='H')
148  !
149  ALLOCATE(pgrid_par(kgrid_par))
150  CALL read_gridtype(hfiletype,hgrid,kgrid_par,u%NSIZE_FULL,.true.,pgrid_par,iresp,hdir='H')
151 #else
152  CALL read_gridtype(hfiletype,hgrid,kgrid_par,kl,.false.,hdir=hdir)
153  !
154  ALLOCATE(pgrid_par(kgrid_par))
155  CALL read_gridtype(hfiletype,hgrid,kgrid_par,kl,.true.,pgrid_par,iresp,hdir=hdir)
156 #endif
157  !
158  !---------------------------------------------------------------------------
159  !
160  !* 6. Closes the file
161  ! ---------------
162  !
163  CALL close_aux_io_surf(hfile,hfiletype)
164  !
165  !------------------------------------------------------------------------------
166  !
167  !* 7. Open namelist
168  ! -------------
169  !
170  CALL open_namelist(hprogram,ilunam)
171  !
172  !------------------------------------------------------------------------------
173  !
174  !* 8. Grid modification
175  ! -----------------
176  !
177  IF (.NOT. ogrid) CALL grid_modif(u,iluout,ilunam,hgrid,kgrid_par,pgrid_par,kl)
178  !
179  CALL close_namelist(hprogram,ilunam)
180  !
181 ELSE
182  !
183  CALL read_nam_gridtype(gcp,pgrid_full_par,u%NDIM_FULL,hprogram,hgrid,kgrid_par,pgrid_par,kl,hdir)
184  !
185 ENDIF
186  !
187  !------------------------------------------------------------------------------
188  !
189 !* 9. Close namelist
190 ! --------------
191 !
192 IF (lhook) CALL dr_hook('GRID_FROM_FILE',1,zhook_handle)
193 !
194 !-------------------------------------------------------------------------------
195 !
196 END SUBROUTINE grid_from_file
subroutine close_aux_io_surf(HFILE, HFILETYPE)
subroutine read_gridtype( HPROGRAM, HGRID, KGRID_PAR, KLU, OREAD, PGRID
integer, parameter jprb
Definition: parkind1.F90:32
subroutine grid_from_file(U, GCP, PGRID_FULL_PAR, HPROGRAM, HFILE, HFI
subroutine close_namelist(HPROGRAM, KLUNAM)
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
integer, dimension(:), allocatable nsize_task
logical lhook
Definition: yomhook.F90:15
subroutine grid_modif(U, KLUOUT, KLUNAM, HGRID, KGRID_PAR, PGRID_PAR, KL
Definition: grid_modif.F90:7
subroutine open_namelist(HPROGRAM, KLUNAM, HFILE)
subroutine open_aux_io_surf(HFILE, HFILETYPE, HMASK, HDIR)
subroutine read_nam_gridtype(GCP, PGRID_FULL_PAR, KDIM_FULL, HPROGRAM