SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
get_adj_mes_ign.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 get_adj_mes_ign(KGRID_PAR,KL,PGRID_PAR,KLEFT,KRIGHT,KTOP,KBOTTOM)
7 ! ##############################################################
8 !
9 !!**** *GET_ADJACENT_MESHES_IGN* get the near grid mesh indices
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !! METHOD
15 !! ------
16 !!
17 !! REFERENCE
18 !! ---------
19 !!
20 !! AUTHOR
21 !! ------
22 !!
23 !! E. Martin Meteo-France
24 !!
25 !! MODIFICATION
26 !! ------------
27 !!
28 !! Original 10/2007
29 !!
30 !----------------------------------------------------------------------------
31 !
32 !* 0. DECLARATION
33 ! -----------
34 !
36 !
37 USE yomhook ,ONLY : lhook, dr_hook
38 USE parkind1 ,ONLY : jprb
39 !
40 IMPLICIT NONE
41 !
42 !* 0.1 Declaration of arguments
43 ! ------------------------
44 !
45 INTEGER, INTENT(IN) :: kgrid_par ! size of PGRID_PAR
46 INTEGER, INTENT(IN) :: kl ! number of points
47 REAL, DIMENSION(KGRID_PAR), INTENT(IN) :: pgrid_par ! grid parameters
48 INTEGER, DIMENSION(KL), INTENT(OUT) :: kleft ! left mesh index
49 INTEGER, DIMENSION(KL), INTENT(OUT) :: kright ! right mesh index
50 INTEGER, DIMENSION(KL), INTENT(OUT) :: ktop ! top mesh index
51 INTEGER, DIMENSION(KL), INTENT(OUT) :: kbottom ! bottom mesh index
52 !
53 !* 0.2 Declaration of other local variables
54 ! ------------------------------------
55 !
56 REAL,DIMENSION(KL) :: zx
57 REAL,DIMENSION(KL) :: zy
58 REAL,DIMENSION(KL) :: zdx
59 REAL,DIMENSION(KL) :: zdy
60 REAL :: zecx, zecy, zecdx, zecdy
61 INTEGER :: jx, jy
62 INTEGER :: il
63 REAL(KIND=JPRB) :: zhook_handle
64 !
65 !----------------------------------------------------------------------------
66 !
67 IF (lhook) CALL dr_hook('GET_ADJ_MES_IGN',0,zhook_handle)
68 !
69  CALL get_gridtype_ign(pgrid_par,px=zx,py=zy,pdx=zdx,pdy=zdy)
70 !
71 kleft(:) = 0
72 kright(:) = 0
73 ktop(:) = 0
74 kbottom(:) = 0
75 !
76 DO jx=1,kl
77  !
78  DO jy=1,kl
79  !
80  zecx = abs(zx(jy)-zx(jx))
81  zecy = abs(zy(jy)-zy(jx))
82  !
83  zecdx = (zdx(jy)+zdx(jx))/2.
84  zecdy = (zdy(jy)+zdy(jx))/2.
85  !
86  IF ( zecx <= zecdx .AND. zecy <= zecdy ) THEN ! points overlap or are next to each other in x and y directions
87  !
88  IF ( zecdy-zecy <= zecdx-zecx .AND. zecx/=zecdx ) THEN ! overlap smaller in y than in x
89  !
90  IF ( zy(jy) < zy(jx) .AND. & ! Y under X in y direction
91  ( kbottom(jx)==0 .OR. & ! bottom not assigned yet
92  zecy < abs(zy(max(1,kbottom(jx)))-zy(jx)) .OR. & ! this y point is closer to x in y direction
93  zecx < abs(zx(max(1,kbottom(jx)))-zx(jx)) ) ) THEN ! this y point is closer to x in x direction
94  !
95  kbottom(jx) = jy
96  !
97  ELSEIF ( zy(jy) > zy(jx) .AND. & ! Y above X in y direction
98  ( ktop(jx)==0 .OR. & ! top not assigned yet
99  zecy < abs(zy(max(1,ktop(jx)))-zy(jx)) .OR. & ! this y point is closer to x in y direction
100  zecx < abs(zx(max(1,ktop(jx)))-zx(jx)) ) ) THEN ! this y point is closer to x in x direction
101  !
102  ktop(jx) = jy
103  !
104  ENDIF
105  !
106  ELSEIF (zecdx-zecx < zecdy-zecy ) THEN ! overlap smaller in x than in y
107  !
108  IF ( zx(jy) < zx(jx) .AND. & ! Y left X in x direction
109  ( kleft(jx)==0 .OR. & ! left not assigned yet
110  zecy < abs(zy(max(1,kleft(jx)))-zy(jx)) .OR. & ! this y point is closer to x in y direction
111  zecx < abs(zx(max(1,kleft(jx)))-zx(jx)) ) ) THEN ! this y point is closer to x in x direction
112  !
113  kleft(jx)=jy
114  !
115  ELSEIF ( zx(jy) > zx(jx) .AND. & ! Y right X in x direction
116  ( kright(jx)==0 .OR. & ! right not assigned yet
117  zecy < abs(zy(max(1,kright(jx)))-zy(jx)) .OR. & ! this y point is closer to x in y direction
118  zecx < abs(zx(max(1,kright(jx)))-zx(jx)) ) ) THEN ! this y point is closer to x in x direction
119  !
120  kright(jx)=jy
121  !
122  ENDIF
123  !
124  ENDIF
125  !
126  ENDIF
127  !
128  ENDDO
129  !
130 ENDDO
131 !
132 IF (lhook) CALL dr_hook('GET_ADJ_MES_IGN',1,zhook_handle)
133 !
134 !-------------------------------------------------------------------------------
135 !
136 END SUBROUTINE get_adj_mes_ign
subroutine get_gridtype_ign(PGRID_PAR, KLAMBERT, KL, PX, PY, PDX, PDY, KDIMX, KDIMY, PXALL, PYALL)
subroutine get_adj_mes_ign(KGRID_PAR, KL, PGRID_PAR, KLEFT, KRIGHT, KTOP, KBOTTOM)