SURFEX v8.1
General documentation of Surfex
prep_grid_extern.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 prep_grid_extern (GCP,HFILETYPE,KLUOUT,HGRIDTYPE,HINTERP_TYPE,KNI)
7 ! ##########################################################################
8 !
9 !!**** *PREP_GRID_EXTERN* - 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 !
42 !
45  xla, xola, xolo, np, xloph, no
47 !
49  xlap, xlop, xcoef, xlat, xlon, xilatarray_g=>xilatarray
51  xilatarray_l=>xilatarray
52 USE modd_grid_cartesian, ONLY : xx_ca=>xx, xy_ca=>xy, ncij_ca=>ncij, xcx_ca=>xcx, xcy_ca=>xcy
53 !
55 !
56 USE modi_bilin_coef
58 USE modi_prep_grid_conf_proj
59 USE modi_prep_grid_cartesian
60 USE modi_prep_grid_gauss
61 USE modi_prep_grid_lonlat_reg
62 USE modi_horibl_surf_init
63 USE modi_horibl_surf_coef
64 USE modi_arpege_stretch_a
65 !
66 USE yomhook ,ONLY : lhook, dr_hook
67 USE parkind1 ,ONLY : jprb
68 !
69 USE modi_abor1_sfx
70 !
71 IMPLICIT NONE
72 !
73 !* 0.1. Declaration of arguments
74 ! ------------------------
75 !
76 TYPE(grid_conf_proj_t),INTENT(INOUT) :: GCP
77 !
78  CHARACTER(LEN=6), INTENT(IN) :: HFILETYPE ! file type
79 INTEGER, INTENT(IN) :: KLUOUT ! logical unit of output listing
80  CHARACTER(LEN=10), INTENT(OUT) :: HGRIDTYPE ! Grid type
81  CHARACTER(LEN=6), INTENT(OUT) :: HINTERP_TYPE ! Grid type
82 INTEGER, INTENT(OUT) :: KNI ! number of points
83 !
84 !* 0.2 Declaration of local variables
85 ! ------------------------------
86 !
87 INTEGER :: IINLA, INO
88 INTEGER :: IRESP
89 REAL(KIND=JPRB) :: ZHOOK_HANDLE
90 !
91 !-----------------------------------------------------------------------
92 !
93 !* 1 Type of grid
94 ! ------------
95 !
96 IF (lhook) CALL dr_hook('PREP_GRID_EXTERN',0,zhook_handle)
97  CALL read_surf(hfiletype,'GRID_TYPE',hgridtype,iresp,hdir='-')
98 !
99 !-----------------------------------------------------------------------
100 !
101 !* 2 Reading of grid
102 ! ---------------
103 !
104 IF (hgridtype=='CONF PROJ ') THEN
105  CALL prep_grid_conf_proj(gcp,hfiletype,hinterp_type,kni)
106 ELSE IF (hgridtype=='CARTESIAN ') THEN
107  CALL prep_grid_cartesian(hfiletype,hinterp_type,kni)
108 ELSE IF (hgridtype=='GAUSS ') THEN
109  CALL prep_grid_gauss(hfiletype,hinterp_type,kni)
110 ELSE IF (hgridtype=='LONLAT REG') THEN
111  hgridtype = 'LATLON '
112  CALL prep_grid_lonlat_reg(hfiletype,hinterp_type,kni)
113 ELSE
114  WRITE(kluout,*) 'GRIDTYPE "',hgridtype,'" NOT ACCEPTED AS INPUT FILE FOR FIELD PREPARATION'
115  CALL abor1_sfx('GRIDTYPE NOT ACCEPTED AS INPUT FILE FOR FIELD PREPARATION, '//hgridtype)
116 END IF
117 !
118 IF (ALLOCATED(xlat_out)) THEN
119  !
120  ino = SIZE(xlat_out)
121  !
122  IF (hgridtype=='GAUSS ' .OR. hgridtype=='LATLON ') THEN
123  !
124  IF (hgridtype=='GAUSS ') THEN
125  IF (ALLOCATED(xlat)) DEALLOCATE(xlat)
126  IF (ALLOCATED(xlon)) DEALLOCATE(xlon)
127  ALLOCATE(xlat(ino))
128  ALLOCATE(xlon(ino))
129  IF (lrotpole) THEN
130 !* transformation of output latitudes, longitudes into rotated coordinates
132  ELSE
133  xlat = xlat_out
134  xlon = xlon_out
135  END IF
136  ENDIF
137 !
138  IF (ALLOCATED(no)) DEALLOCATE(no)
139  IF (ALLOCATED(xla)) DEALLOCATE(xla)
140  IF (ALLOCATED(xola)) DEALLOCATE(xola)
141  IF (ALLOCATED(xolo)) DEALLOCATE(xolo)
142  IF (ALLOCATED(ninloh)) DEALLOCATE(ninloh)
143 
144  ALLOCATE(no(ino,4))
145  ALLOCATE(xola(ino),xolo(ino))
146  ALLOCATE(xla(ino,4))
147  !
148  IF (hgridtype=='GAUSS ') THEN
149  iinla = ninla
150  ALLOCATE(ninloh(iinla+4))
153  ninloh,xola,xolo,xilo1h,xilo2h,xla,xilatarray_g)
154  ELSEIF (hgridtype=='LATLON ') THEN
155  iinla = ninlat
156  ALLOCATE(ninloh(iinla+4))
160  xilo2h,xla,xilatarray_l)
161 
162  ENDIF
163  !
164  IF (ALLOCATED(np)) DEALLOCATE(np)
165  IF (ALLOCATED(xloph)) DEALLOCATE(xloph)
166  ALLOCATE(np(ino,12))
167  ALLOCATE(xloph(ino,12))
168 
169  IF (lglobs) iinla = iinla + 2
170  IF (lglobn) iinla = iinla + 2
172  no,ninloh(1:iinla),np,xloph)
173  !
174  ELSEIF (hgridtype=='CONF PROJ ') THEN
175  !
176  IF (ALLOCATED(xcx)) DEALLOCATE(xcx)
177  IF (ALLOCATED(xcy)) DEALLOCATE(xcy)
178  IF (ALLOCATED(ncij)) DEALLOCATE(ncij)
179  ALLOCATE(xcx(ino,3),xcy(ino,3),ncij(ino,2))
180  !
181  !* 2. Transformation of latitudes/longitudes into metric coordinates of output grid
182  !
183  CALL xy_conf_proj(gcp%XLAT0,gcp%XLON0,gcp%XRPK,gcp%XBETA,gcp%XLATORI,gcp%XLONORI, &
185  !
186  !* 3. Put input field on its squared grid
187  !
188  CALL bilin_coef(kluout,xx,xy,xx_out,xy_out,xcx,xcy,ncij(:,1),ncij(:,2))
189  !
190  ELSEIF (hgridtype=='CARTESIAN ') THEN
191  !
192  IF (ALLOCATED(xcx_ca)) DEALLOCATE(xcx_ca)
193  IF (ALLOCATED(xcy_ca)) DEALLOCATE(xcy_ca)
194  IF (ALLOCATED(ncij_ca)) DEALLOCATE(ncij_ca)
195  ALLOCATE(xcx_ca(ino,3),xcy_ca(ino,3),ncij_ca(ino,2))
196  !
197  CALL bilin_coef(kluout,xx_ca,xy_ca,xx_out,xy_out,xcx_ca,xcy_ca,ncij_ca(:,1),ncij_ca(:,2))
198  !
199  ENDIF
200  !
201 ENDIF
202 !
203 IF (lhook) CALL dr_hook('PREP_GRID_EXTERN',1,zhook_handle)
204 !
205 !-----------------------------------------------------------------------
206 !
207 END SUBROUTINE prep_grid_extern
subroutine horibl_surf_coef(KOLEN, OINTERP, OGLOBLON, PILO1, PILO2, POLO, KO, KINLO, KP, PLOP)
integer, dimension(:), allocatable ninloh
Definition: modd_horibl.F90:39
real, dimension(:), allocatable xlat
real, dimension(:,:), allocatable xcx
real, dimension(:), allocatable xy
real, dimension(:), allocatable xola
Definition: modd_horibl.F90:41
subroutine prep_grid_conf_proj(GCP, HFILETYPE, HINTERP_TYPE, KNI)
subroutine prep_grid_cartesian(HFILETYPE, HINTERP_TYPE, KNI)
real, dimension(:), allocatable xx
integer, dimension(:,:), allocatable np
Definition: modd_horibl.F90:42
real, dimension(:), allocatable xlon_out
Definition: modd_prep.F90:48
real, dimension(:), allocatable xy
integer, dimension(:,:), allocatable ncij
subroutine xy_conf_proj(PLAT0, PLON0, PRPK, PBETA, PLATOR, PLONOR, PX, PY, PLAT, PLON)
real, dimension(:), allocatable xx
real, dimension(:), allocatable xy_out
Definition: modd_prep.F90:51
logical lgloblon
Definition: modd_horibl.F90:35
subroutine prep_grid_extern(GCP, HFILETYPE, KLUOUT, HGRIDTYPE, HINTER
subroutine prep_grid_lonlat_reg(HFILETYPE, HINTERP_TYPE, KNI)
integer, dimension(:,:), allocatable no
Definition: modd_horibl.F90:38
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
subroutine bilin_coef(KLUOUT, PX1, PY1, PX2, PY2, PCX, PCY, KCI, KCJ)
Definition: bilin_coef.F90:7
logical, dimension(:), allocatable linterp
Definition: modd_prep.F90:43
integer, parameter jprb
Definition: parkind1.F90:32
real, dimension(:,:), allocatable xcy
real, dimension(:), allocatable xlon
integer, dimension(:), allocatable ninlo
subroutine prep_grid_gauss(HFILETYPE, HINTERP_TYPE, KNI)
real, dimension(:), allocatable xlat_out
Definition: modd_prep.F90:47
logical lglobs
Definition: modd_horibl.F90:35
real, dimension(:,:), allocatable xcy
real, dimension(:), allocatable xolo
Definition: modd_horibl.F90:41
real, dimension(:), allocatable xilatarray
real, dimension(:), allocatable xx_out
Definition: modd_prep.F90:50
real, dimension(:,:), allocatable xcx
logical lhook
Definition: yomhook.F90:15
subroutine horibl_surf_init(PILA1, PILO1, PILA2, PILO2, KINLA, KINLO, KOLEN, PXOUT, PYOUT, OINTERP, OGLOBLON, OGLOBN, OGLOBS, KO, KINLO_OUT, POLA, POLO, PILO1_OUT, PILO2_OUT, PLA, PILATARRAY)
integer, dimension(:), allocatable ninlon
logical lglobn
Definition: modd_horibl.F90:35
subroutine arpege_stretch_a(KN, PLAP, PLOP, PCOEF, PLAR, PLOR, PLAC, PLOC)
real, dimension(:,:), allocatable xla
Definition: modd_horibl.F90:40
integer, dimension(:,:), allocatable ncij
real, dimension(:,:), allocatable xloph
Definition: modd_horibl.F90:43
subroutine wlog_mpi(HLOG, PLOG, KLOG, KLOG2, OLOG)