37 USE yomhook
,ONLY : lhook, dr_hook
38 USE parkind1
,ONLY : jprb
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
57 REAL,
DIMENSION(MAX(SIZE(PXALL),SIZE(PYALL))*3) :: zall
58 REAL(KIND=JPRB) :: zhook_handle
62 IF (lhook) CALL dr_hook(
'GET_XYALL_IGN',0,zhook_handle)
69 CALL
sort(kdimx,zall,pxall)
73 CALL
sort(kdimy,zall,pyall)
75 IF (lhook) CALL dr_hook(
'GET_XYALL_IGN',1,zhook_handle)
83 REAL,
DIMENSION(:),
INTENT(IN) :: pin
84 REAL,
DIMENSION(:),
INTENT(IN) :: pdin
85 REAL,
DIMENSION(:),
INTENT(OUT) :: pout
86 INTEGER,
INTENT(INOUT) :: ksize
87 REAL,
DIMENSION(SIZE(POUT)) :: zdout
89 REAL(KIND=JPRB) :: zhook_handle
91 IF (lhook) CALL dr_hook(
'GET_XYALL_IGN:GET_COORD',0,zhook_handle)
95 IF (
SIZE(pout)>0)
THEN
98 IF (
SIZE(pout)>1) pout(2) = pin(1)-pdin(1)
99 IF (
SIZE(pout)>2) pout(3) = pin(1)+pdin(1)
101 ksize = min(3,
SIZE(pin))
106 IF ( pout(j) == pin(i) )
EXIT
107 IF ( j == ksize )
THEN
110 zdout(ksize) = pdin(i)/2.
115 IF ( pout(j)<pin(i) .AND. pout(j)+zdout(j)>=pin(i)-pdin(i) )
EXIT
116 IF ( j == ksize )
THEN
118 pout(ksize) = pin(i)-pdin(i)
122 IF ( pout(j)>pin(i) .AND. pout(j)-zdout(j)<=pin(i)+pdin(i) )
EXIT
123 IF ( j == ksize )
THEN
125 pout(ksize) = pin(i)+pdin(i)
130 IF (lhook) CALL dr_hook(
'GET_XYALL_IGN:GET_COORD',1,zhook_handle)
134 SUBROUTINE sort(KSIZE,PIN,POUT)
138 INTEGER,
INTENT(INOUT) :: ksize
139 REAL,
DIMENSION(:),
INTENT(INOUT) :: pin
140 REAL,
DIMENSION(:),
INTENT(OUT) :: pout
141 REAL,
DIMENSION(SIZE(PIN)) :: zout
143 INTEGER,
DIMENSION(1) :: idmin
145 REAL(KIND=JPRB) :: zhook_handle
147 IF (lhook) CALL dr_hook(
'GET_XYALL_IGN:SORT',0,zhook_handle)
149 zmax = maxval(pin(1:ksize))
151 zmin = minval(pin(1:ksize))
153 idmin = minloc(pin(1:ksize))
154 pin(idmin(1)) = zmax+1
158 pout(1:ksize-2) = zout(2:ksize-1)
159 ksize = max(0,ksize-2)
161 IF (lhook) CALL dr_hook(
'GET_XYALL_IGN:SORT',1,zhook_handle)
subroutine get_xyall_ign(PX, PY, PDX, PDY, PXALL, PYALL, KDIMX, KDIMY)
subroutine sort(KSIZE, PIN, POUT)
subroutine get_coord(PIN, PDIN, POUT, KSIZE)