7 kindex,kissox,kissoy,pvalue,pnodata)
31 xy_max, xdx, xdy, xxlims, nxids, xdx_max,&
38 USE yomhook
,ONLY : lhook, dr_hook
39 USE parkind1
,ONLY : jprb
46 INTEGER,
INTENT(IN) :: kgrid_par
47 INTEGER,
INTENT(IN) :: ksso
48 REAL,
DIMENSION(:),
INTENT(IN) :: pgrid_par
49 REAL,
DIMENSION(:),
INTENT(IN) :: plat
50 REAL,
DIMENSION(:),
INTENT(IN) :: plon
51 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: kindex
52 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: kissox
53 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: kissoy
55 REAL,
DIMENSION(:),
OPTIONAL,
INTENT(IN) :: pvalue
56 REAL,
OPTIONAL,
INTENT(IN) :: pnodata
63 REAL,
DIMENSION(:),
ALLOCATABLE :: zx
64 REAL,
DIMENSION(:),
ALLOCATABLE :: zy
66 REAL,
DIMENSION(:),
ALLOCATABLE :: zxlim
68 REAL,
DIMENSION(SIZE(PLAT)) :: zvalue
70 LOGICAL,
DIMENSION(SIZE(PLAT)) :: gmask
76 INTEGER :: isize, ifact
80 INTEGER,
DIMENSION(SIZE(PLAT),2) :: ici
81 INTEGER,
DIMENSION(1) :: idx0
82 REAL(KIND=JPRB) :: zhook_handle
85 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_IGN_1',0,zhook_handle)
87 IF (present(pvalue) .AND. present(pnodata))
THEN
95 IF (.NOT.
ALLOCATED(xxlim))
THEN
102 ifact = floor(sqrt(float(il)))
103 isize = floor(float(il) / ifact)
104 ALLOCATE(nfracd(ifact+1))
108 nfracd(jj) = 1 + (jj-1)*isize
118 ALLOCATE(xxlims(0:il))
128 xxlim(:)=zx(:)-xdx(:)/2.
129 xylim(:)=zy(:)-xdy(:)/2.
131 xx_min = minval(xxlim)
132 xx_max = maxval(xxlim+xdx)
133 xy_min = minval(xylim)
134 xy_max = maxval(xylim+xdy)
136 xdx_max = minval(xdx)
140 zvalx = maxval(zxlim) + 1.
143 xxlims(ji) = zxlim(idx0(1))
145 zxlim(idx0(1)) = zvalx
147 xxlims(0) = xxlims(1) - xdx_max -1.
154 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_IGN_1',1,zhook_handle)
155 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_IGN_2',0,zhook_handle)
160 ALLOCATE(zx(
SIZE(plat)))
161 ALLOCATE(zy(
SIZE(plat)))
166 CALL
xy_ign(ilambert,zx,zy,plat,plon)
171 IF ( zx(jl)<xx_min .OR. zx(jl)>xx_max &
172 .OR. zy(jl)<xy_min .OR. zy(jl)>xy_max ) gmask(jl) = .true.
178 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_IGN_2',1,zhook_handle)
179 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_IGN_3',0,zhook_handle)
181 ifact =
SIZE(nfracd) - 1
192 IF (zvalue(jl)==znodata) cycle
198 IF (zx(jl)>xxlims(nfracd(jj)))
THEN
200 DO ji = nfracd(jj+1),nfracd(jj),-1
201 IF (zx(jl)>xxlims(ji))
THEN
207 DO ji = ici(jl,2),0,-1
208 IF (zx(jl)>=xxlims(ji)+xdx_max)
THEN
223 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_IGN_3',1,zhook_handle)
224 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_IGN_4',0,zhook_handle)
228 IF (zvalue(jl)==znodata) cycle
232 DO ji=ici(jl,1),ici(jl,2)
234 IF (zy(jl)>xylim(nxids(ji)) .AND. zy(jl)<xylim(nxids(ji))+xdy(nxids(ji)) &
235 .AND. zx(jl)<xxlims(ji)+xdx(nxids(ji)))
THEN
239 kindex(icpt,jl) = nxids(ji)
242 kissox(icpt,jl) = 1 + int( float(ksso) * (zx(jl)-xxlim(nxids(ji)))/xdx(nxids(ji)) )
243 kissoy(icpt,jl) = 1 + int( float(ksso) * (zy(jl)-xylim(nxids(ji)))/xdy(nxids(ji)) )
246 IF (icpt==novmx)
EXIT
254 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_IGN_4',1,zhook_handle)
subroutine xy_ign(KLAMBERT, PX, PY, PLAT, PLON)
subroutine get_mesh_index_ign(KGRID_PAR, KSSO, PGRID_PAR, PLAT, PLON, KINDEX, KISSOX, KISSOY, PVALUE, PNODATA)
subroutine get_gridtype_ign(PGRID_PAR, KLAMBERT, KL, PX, PY, PDX, PDY, KDIMX, KDIMY, PXALL, PYALL)