7 kindex,kissox,kissoy,pvalue,pnodata)
34 USE yomhook
,ONLY : lhook, dr_hook
35 USE parkind1
,ONLY : jprb
42 INTEGER,
INTENT(IN) :: kgrid_par
43 INTEGER,
INTENT(IN) :: ksso
44 REAL,
DIMENSION(:),
INTENT(IN) :: pgrid_par
45 REAL,
DIMENSION(:),
INTENT(IN) :: plat
46 REAL,
DIMENSION(:),
INTENT(IN) :: plon
47 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: kindex
48 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: kissox
49 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: kissoy
51 REAL,
DIMENSION(:),
OPTIONAL,
INTENT(IN) :: pvalue
52 REAL,
OPTIONAL,
INTENT(IN) :: pnodata
70 REAL,
DIMENSION(SIZE(PLAT)) :: zvalue
72 REAL,
DIMENSION(SIZE(PLON)) :: zlon
74 INTEGER,
DIMENSION(SIZE(PLAT)) :: ici, icj
76 REAL(KIND=JPRB) :: zhook_handle
80 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_LONLAT_REG_1',0,zhook_handle)
82 IF (present(pvalue) .AND. present(pnodata))
THEN
90 IF (.NOT.
ALLOCATED(xlatlim))
THEN
96 zlatmin,zlatmax,nlon,nlat )
103 zdlon = (zlonmax-zlonmin) / float(nlon)
104 zdlat = (zlatmax-zlatmin) / float(nlat)
106 ALLOCATE(xlonlim(nlon+1))
108 xlonlim(ji) = zlonmin + float(ji-1)*zdlon
111 ALLOCATE(xlatlim(nlat+1))
113 xlatlim(ji) = zlatmin + float(ji-1)*zdlat
116 xlon0 = 0.5*(zlonmin+zlonmax)
119 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_LONLAT_REG_1',1,zhook_handle)
120 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_LONLAT_REG_2',0,zhook_handle)
127 zlon(:) = plon(:)+nint((xlon0-plon(:))/360.)*360.
134 IF (
SIZE(plat)/=nlon*nlat)
THEN
140 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_LONLAT_REG_2',1,zhook_handle)
141 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_LONLAT_REG_3',0,zhook_handle)
148 IF (zvalue(jl)==znodata) cycle
150 DO jj=
SIZE(xlonlim),1,-1
151 IF (xlonlim(jj)<=zlon(jl))
THEN
156 DO jj=
SIZE(xlatlim),1,-1
157 IF (xlatlim(jj)<=plat(jl))
THEN
166 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_LONLAT_REG_3',1,zhook_handle)
167 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_LONLAT_REG_4',0,zhook_handle)
173 IF (zvalue(jl)==znodata) cycle
175 IF ( zlon(jl)<xlonlim(1) .OR. zlon(jl)>=xlonlim(nlon+1) &
176 .OR. plat(jl)<xlatlim(1) .OR. plat(jl)>=xlatlim(nlat+1) )
THEN
188 kindex(1,jl) = (jj-1) * nlon + ji
195 kissox(1,jl) = 1 + int( float(ksso) * (zlon(jl)-xlonlim(ji))/(xlonlim(ji+1)-xlonlim(ji)) )
196 kissoy(1,jl) = 1 + int( float(ksso) * (plat(jl)-xlatlim(jj))/(xlatlim(jj+1)-xlatlim(jj)) )
199 IF (lhook) CALL dr_hook(
'GET_MESH_INDEX_LONLAT_REG_4',1,zhook_handle)
subroutine get_gridtype_lonlat_reg(PGRID_PAR, PLONMIN, PLONMAX, PLATMIN, PLATMAX, KLON, KLAT, KL, PLON, PLAT)
subroutine get_mesh_index_lonlat_reg(KGRID_PAR, KSSO, PGRID_PAR, PLAT, PLON, KINDEX, KISSOX, KISSOY, PVALUE, PNODATA)