30 xy_max, xdx, xdy, xxlims, nxids, xdx_max,&
37 USE yomhook
,ONLY : lhook, dr_hook
38 USE parkind1
,ONLY : jprb
45 INTEGER,
INTENT(IN) :: kgrid_par
46 INTEGER,
INTENT(IN) :: ksso
47 REAL,
DIMENSION(:),
INTENT(IN) :: pgrid_par
48 REAL,
DIMENSION(:),
INTENT(IN) :: plat
49 REAL,
DIMENSION(:),
INTENT(IN) :: plon
50 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: kindex
51 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: kissox
52 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: kissoy
60 REAL,
DIMENSION(SIZE(PLON)) :: zlon
62 REAL,
DIMENSION(:),
ALLOCATABLE :: zx
63 REAL,
DIMENSION(:),
ALLOCATABLE :: zy
64 REAL,
DIMENSION(:),
ALLOCATABLE :: zxlim
66 INTEGER :: isize, ifact
70 INTEGER,
DIMENSION(SIZE(PLAT),2) :: ici
71 INTEGER,
DIMENSION(1) :: idx0
73 LOGICAL,
DIMENSION(SIZE(PLAT)) :: gmask
75 REAL(KIND=JPRB) :: zhook_handle
79 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_LONLATVAL',0,zhook_handle)
80 IF (.NOT.
ALLOCATED(xxlim))
THEN
87 ifact = floor(sqrt(float(il)))
88 isize = floor(float(il) / ifact)
89 ALLOCATE(nfracd(ifact+1))
93 nfracd(jj) = 1 + (jj-1)*isize
103 ALLOCATE(xxlims(0:il))
113 xxlim(:)=zx(:)-xdx(:)/2.
114 xylim(:)=zy(:)-xdy(:)/2.
116 xx_min = minval(xxlim)
117 xx_max = maxval(xxlim+xdx)
118 xy_min = minval(xylim)
119 xy_max = maxval(xylim+xdy)
121 xdx_max = minval(xdx)
125 zvalx = maxval(zxlim) + 1.
128 xxlims(ji) = zxlim(idx0(1))
130 zxlim(idx0(1)) = zvalx
132 xxlims(0) = xxlims(1) - xdx_max -1.
140 xlon0 = 0.5*(xx_min+xx_max)
147 zlon(:) = plon(:)+nint((xlon0-plon(:))/360.)*360.
151 IF ( zlon(jl)<xx_min .OR. zlon(jl)>xx_max &
152 .OR. plat(jl)<xy_min .OR. plat(jl)>xy_max ) gmask(jl) = .true.
158 ifact =
SIZE(nfracd) - 1
174 IF (zlon(jl)>xxlims(nfracd(jj)))
THEN
176 DO ji = nfracd(jj+1),nfracd(jj),-1
177 IF (zlon(jl)>xxlims(ji))
THEN
183 DO ji = ici(jl,2),0,-1
184 IF (zlon(jl)>=xxlims(ji)+xdx_max)
THEN
204 DO ji=ici(jl,1),ici(jl,2)
206 IF (plat(jl)>xylim(nxids(ji)) .AND. plat(jl)<xylim(nxids(ji))+xdy(nxids(ji)) &
207 .AND. zlon(jl)<xxlims(ji)+xdx(nxids(ji)))
THEN
211 kindex(icpt,jl) = nxids(ji)
214 kissox(icpt,jl) = 1 + int( float(ksso) * (zlon(jl)-xxlim(nxids(ji)))/xdx(nxids(ji)) )
215 kissoy(icpt,jl) = 1 + int( float(ksso) * (plat(jl)-xylim(nxids(ji)))/xdy(nxids(ji)) )
218 IF (icpt==novmx)
EXIT
226 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_LONLATVAL',1,zhook_handle)
subroutine get_mesh_index_lonlatval(KGRID_PAR, KSSO, PGRID_PAR, PLAT, PLON, KINDEX, KISSOX, KISSOY)
subroutine get_gridtype_lonlatval(PGRID_PAR, KL, PX, PY, PDX, PDY)