SURFEX v8.1
General documentation of Surfex
write_grid.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 write_grid (HSELECT,HPROGRAM,HGRID,PGRID_PAR,PLAT,PLON,PMESH_SIZE,KRESP,HDIR)
7 ! #########################################
8 !
9 !!**** *WRITE_GRID* - routine to write the horizontal grid of a scheme
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 !! V. Masson *Meteo France*
31 !!
32 !! MODIFICATIONS
33 !! -------------
34 !! Original 01/2004
35 !! P. Samuelsson SMHI 12/2012 Rotated lonlat
36 !! S. Senesi 08/15 Adapt to XIOS (non-sensical in that case => return immediately)
37 !-------------------------------------------------------------------------------
38 !
39 !* 0. DECLARATIONS
40 ! ------------
41 !
42 !
44 !
45 USE yomhook ,ONLY : lhook, dr_hook
46 USE parkind1 ,ONLY : jprb
47 !
48 USE modi_write_gridtype_cartesian
49 !
50 USE modi_write_gridtype_conf_proj
51 !
52 USE modi_write_gridtype_gauss
53 !
54 USE modi_write_gridtype_ign
55 !
56 USE modi_write_gridtype_lonlat_reg
57 !
58 USE modi_write_gridtype_lonlatval
59 !
60 USE modi_write_gridtype_lonlat_rot
61 IMPLICIT NONE
62 !
63 !* 0.1 Declarations of arguments
64 ! -------------------------
65 !
66  CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HSELECT
67 !
68  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
69  CHARACTER(LEN=10), INTENT(IN) :: HGRID ! type of horizontal grid
70 REAL, DIMENSION(:), POINTER :: PGRID_PAR ! parameters defining this grid
71 REAL, DIMENSION(:), INTENT(IN) :: PLAT ! latitude (degrees)
72 REAL, DIMENSION(:), INTENT(IN) :: PLON ! longitude (degrees)
73 REAL, DIMENSION(:), INTENT(IN) :: PMESH_SIZE ! horizontal mesh size (m2)
74 INTEGER, INTENT(OUT) :: KRESP ! error return code
75  CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: HDIR ! type of field :
76  ! 'H' : field with
77  ! horizontal spatial dim.
78  ! 'A' : (complete) field with
79  ! horizontal spatial dim.
80  ! '-' : no horizontal dim.
81 !
82 !* 0.2 Declarations of local variables
83 ! -------------------------------
84 !
85  CHARACTER(LEN=100) :: YCOMMENT
86  CHARACTER(LEN=1) :: YDIR
87 REAL(KIND=JPRB) :: ZHOOK_HANDLE
88 !---------------------------------------------------------------------------
89 !
90 !* 1. Write type of grid
91 ! ------------------
92 !
93 IF (lhook) CALL dr_hook('WRITE_GRID',0,zhook_handle)
94 !
95 IF (trim(hprogram) == 'XIOS') THEN
96  IF (lhook) CALL dr_hook('WRITE_GRID',1,zhook_handle)
97  RETURN
98 ENDIF
99 !
100 ycomment='GRID TYPE'
101  CALL write_surf(hselect, hprogram,'GRID_TYPE',hgrid,kresp,ycomment)
102 !
103 !---------------------------------------------------------------------------
104 !
105 !* 2. Write parameters of the grid
106 ! ----------------------------
107 !
108 ydir='h'
109 IF (PRESENT(HDIR)) YDIR = HDIR
110 !
111 SELECT CASE (HGRID)
112  CASE("CONF PROJ ")
113  CALL WRITE_GRIDTYPE_CONF_PROJ(HSELECT, HPROGRAM,SIZE(PLAT),SIZE(PGRID_PAR),PGRID_PAR(:),KRESP,YDIR)
114  CASE("CARTESIAN ")
115  CALL WRITE_GRIDTYPE_CARTESIAN(HSELECT, HPROGRAM,SIZE(PLAT),SIZE(PGRID_PAR),PGRID_PAR(:),KRESP,YDIR)
116  CASE("LONLAT REG")
117  CALL WRITE_GRIDTYPE_LONLAT_REG(HSELECT, HPROGRAM,SIZE(PLAT),SIZE(PGRID_PAR),PGRID_PAR(:),KRESP)
118  CASE("GAUSS ")
119  CALL WRITE_GRIDTYPE_GAUSS(HSELECT, HPROGRAM,SIZE(PLAT),SIZE(PGRID_PAR),PGRID_PAR(:),KRESP)
120  CASE("IGN ")
121  CALL WRITE_GRIDTYPE_IGN(HSELECT, HPROGRAM,SIZE(PLAT),SIZE(PGRID_PAR),PGRID_PAR(:),KRESP)
122  CASE("LONLATVAL ")
123  CALL WRITE_GRIDTYPE_LONLATVAL(HSELECT, HPROGRAM,SIZE(PLAT),SIZE(PGRID_PAR),PGRID_PAR(:),KRESP)
124  CASE("LONLAT ROT")
125  CALL WRITE_GRIDTYPE_LONLAT_ROT(HSELECT, HPROGRAM,SIZE(PLAT),SIZE(PGRID_PAR),PGRID_PAR(:),KRESP)
126  CASE("NONE ")
127  YCOMMENT='lon(degrees)'
128  CALL WRITE_SURF(HSELECT, HPROGRAM,'lon', PLON,KRESP,YCOMMENT)
129 .AND. IF (KRESP/=0 LHOOK) CALL DR_HOOK('write_grid',1,ZHOOK_HANDLE)
130  IF (KRESP/=0) RETURN
131  YCOMMENT='lat(degrees)'
132  CALL WRITE_SURF(HSELECT, HPROGRAM,'lat', PLAT,KRESP,YCOMMENT)
133 .AND. IF (KRESP/=0 LHOOK) CALL DR_HOOK('write_grid',1,ZHOOK_HANDLE)
134  IF (KRESP/=0) RETURN
135  YCOMMENT='mesh SIZE (m2)'
136  CALL WRITE_SURF(HSELECT, HPROGRAM,'mesh_size',PMESH_SIZE,KRESP,YCOMMENT)
137 .AND. IF (KRESP/=0 LHOOK) CALL DR_HOOK('write_grid',1,ZHOOK_HANDLE)
138  IF (KRESP/=0) RETURN
139 END SELECT
140 IF (LHOOK) CALL DR_HOOK('write_grid',1,ZHOOK_HANDLE)
141 !
142 !---------------------------------------------------------------------------
143 !
144 END SUBROUTINE WRITE_GRID
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
integer, parameter jprb
Definition: parkind1.F90:32
subroutine write_grid(HSELECT, HPROGRAM, HGRID, PGRID_PAR, PLAT, PLON,
Definition: write_grid.F90:7
logical lhook
Definition: yomhook.F90:15