SURFEX v8.1
General documentation of Surfex
get_xyall_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_xyall_ign(PX,PY,PDX,PDY,PXALL,PYALL,KDIMX,KDIMY)
7 ! ################################################################
8 !
9 !!**** *GET_XYALL_IGN*
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 !! S. Faroux *Meteo France*
31 !!
32 !! MODIFICATIONS
33 !! -------------
34 !! Original 07/2011
35 !-------------------------------------------------------------------------------
36 !
37 USE yomhook ,ONLY : lhook, dr_hook
38 USE parkind1 ,ONLY : jprb
39 !
40 IMPLICIT NONE
41 !
42 !* 0.1 Declarations of arguments
43 ! -------------------------
44 !
45 REAL, DIMENSION(:), INTENT(IN) :: PX
46 REAL, DIMENSION(:), INTENT(IN) :: PY
47 REAL, DIMENSION(:), INTENT(IN) :: PDX
48 REAL, DIMENSION(:), INTENT(IN) :: PDY
49 REAL, DIMENSION(:), INTENT(OUT) :: PXALL
50 REAL, DIMENSION(:), INTENT(OUT) :: PYALL
51 INTEGER, INTENT(OUT) :: KDIMX
52 INTEGER, INTENT(OUT) :: KDIMY
53 !
54 !* 0.2 Declarations of local variables
55 ! -------------------------------
56 !
57 REAL, DIMENSION(MAX(SIZE(PXALL),SIZE(PYALL))*3) :: ZALL
58 REAL(KIND=JPRB) :: ZHOOK_HANDLE
59 !
60 !----------------------------------------------------------------------------
61 !
62 IF (lhook) CALL dr_hook('GET_XYALL_IGN',0,zhook_handle)
63 !
64 kdimx = 0
65 kdimy = 0
66 !
67  CALL get_coord(px,pdx,zall,kdimx)
68 pxall(1:kdimx) = zall(1:kdimx)
69 !
70  CALL get_coord(py,pdy,zall,kdimy)
71 pyall(1:kdimy) = zall(1:kdimy)
72 !
73 IF (lhook) CALL dr_hook('GET_XYALL_IGN',1,zhook_handle)
74 !-------------------------------------------------------------------------------
75 CONTAINS
76 !
77 SUBROUTINE get_coord(PIN,PDIN,POUT,KSIZE)
78 !
79 IMPLICIT NONE
80 !
81 REAL, DIMENSION(:), INTENT(IN) :: PIN
82 REAL, DIMENSION(:), INTENT(IN) :: PDIN
83 REAL, DIMENSION(:), INTENT(OUT) :: POUT
84 INTEGER, INTENT(INOUT) :: KSIZE
85 REAL, DIMENSION(SIZE(POUT)) :: ZDOUT, ZOUT, ZDOUT2
86 REAL :: ZMAX, ZMIN
87 INTEGER :: I, J, IDMIN, ICPT, ISIZE
88 REAL(KIND=JPRB) :: ZHOOK_HANDLE
89 !
90 IF (lhook) CALL dr_hook('GET_XYALL_IGN:GET_COORD',0,zhook_handle)
91 !
92 ksize = SIZE(pin)
93 zout(1:ksize) = pin(:)
94 zdout(1:ksize) = pdin(:)
95 !
96 zmax = maxval(zout(1:ksize))
97 DO j=1,ksize
98  zmin = minval(zout(1:ksize))
99  pout(j) = zmin
100  idmin = minloc(zout(1:ksize),1)
101  zdout2(j) = zdout(idmin)
102  zout(idmin) = zmax+1
103 ENDDO
104 !
105 zout(1:ksize) = pout(1:ksize)
106 zdout(1:ksize) = zdout2(1:ksize)
107 !
108 icpt = 1
109 isize = ksize
110 DO j=1,isize-1
111  IF (zout(j)==zout(j+1)) THEN
112  IF (j<isize-1) THEN
113  pout(icpt+1:ksize-1) = zout(j+2:isize)
114  zdout(icpt+1:ksize-1) = zdout2(j+2:isize)
115  ENDIF
116  ksize = ksize - 1
117  ELSE
118  icpt = icpt + 1
119  ENDIF
120 ENDDO
121 !
122 isize = ksize
123 DO j=1,isize-1
124  IF (pout(j)+zdout(j)/2.<pout(j+1)-zdout(j+1)/2.) THEN
125  icpt = 0
126  ksize = ksize + 1
127  pout(ksize) = pout(j) + zdout(j)
128  zdout(ksize) = zdout(j)
129  DO WHILE ( pout(ksize)+zdout(ksize)/2. < pout(j+1)-zdout(j+1)/2. )
130  pout(ksize+1) = pout(ksize) + zdout(ksize)
131  zdout(ksize+1) = zdout(ksize)
132  ksize = ksize + 1
133  ENDDO
134  ENDIF
135 ENDDO
136 !
137 zout(1:ksize) = pout(1:ksize)
138 !
139 zmax = maxval(zout(1:ksize))
140 DO j=1,ksize
141  zmin = minval(zout(1:ksize))
142  pout(j) = zmin
143  idmin = minloc(zout(1:ksize),1)
144  zout(idmin) = zmax+1
145 ENDDO
146 !
147 IF (lhook) CALL dr_hook('GET_XYALL_IGN:GET_COORD',1,zhook_handle)
148 !
149 END SUBROUTINE get_coord
150 !
151 END SUBROUTINE get_xyall_ign
subroutine get_xyall_ign(PX, PY, PDX, PDY, PXALL, PYALL, KDIMX, KDIMY)
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine get_coord(PIN, PDIN, POUT, KSIZE)