46 subroutine sorted_inta(isd, ied, jsd, jed, cubed_sphere, bgrid, iinta, jinta)
47 integer,
intent(in) :: isd, ied, jsd, jed
48 real(kind=R_GRID),
intent(in),
dimension(isd:ied+1,jsd:jed+1,2) :: bgrid
49 logical,
intent(in) :: cubed_sphere
51 integer,
intent(out),
dimension(4,isd:ied,jsd:jed) :: iinta, jinta
55 real,
dimension(4) :: xsort, ysort
56 integer,
dimension(4) :: isort, jsort
61 if (cubed_sphere)
then 67 xsort(1)=bgrid(i ,j ,1); ysort(1)=bgrid(i ,j ,2); isort(1)=i ; jsort(1)=j
68 xsort(2)=bgrid(i ,j+1,1); ysort(2)=bgrid(i ,j+1,2); isort(2)=i ; jsort(2)=j+1
69 xsort(3)=bgrid(i+1,j+1,1); ysort(3)=bgrid(i+1,j+1,2); isort(3)=i+1; jsort(3)=j+1
70 xsort(4)=bgrid(i+1,j ,1); ysort(4)=bgrid(i+1,j ,2); isort(4)=i+1; jsort(4)=j
80 iinta(i,j,1)=i ; jinta(i,j,1)=j
81 iinta(i,j,2)=i ; jinta(i,j,2)=j+1
82 iinta(i,j,3)=i+1; jinta(i,j,3)=j+1
83 iinta(i,j,4)=i+1; jinta(i,j,4)=j
91 integer,
dimension(4),
intent(inout) :: iind, jind
95 real,
dimension(4) :: xsorted, ysorted
96 integer,
dimension(4) :: isorted, jsorted
108 if (xsort(l)<xsorted(ll))
then 110 xsorted(lll+1)=xsorted(lll)
111 ysorted(lll+1)=ysorted(lll)
112 isorted(lll+1)=isorted(lll)
113 jsorted(lll+1)=jsorted(lll)
127 xsort(l)=xsorted(l); ysort(l)=ysorted(l)
128 isort(l)=isorted(l); jsort(l)=jsorted(l)
137 if (ysort(l)<ysorted(ll))
then 139 xsorted(lll+1)=xsorted(lll)
140 ysorted(lll+1)=ysorted(lll)
141 isorted(lll+1)=isorted(lll)
142 jsorted(lll+1)=jsorted(lll)
155 if ( isorted(1)==i .and. jsorted(1)==j )
then 156 if ( isorted(2)==i+1 .and. jsorted(2)==j+1 )
then 157 isorted(2)=isorted(3); jsorted(2)=jsorted(3)
159 if ( isorted(2)==i .and. jsorted(2)==j+1 )
then 160 iind(1)=i ; jind(1)=j
161 iind(2)=i ; jind(2)=j+1
162 iind(3)=i+1; jind(3)=j+1
163 iind(4)=i+1; jind(4)=j
164 elseif ( isorted(2)==i+1 .and. jsorted(2)==j )
then 165 iind(1)=i ; jind(1)=j
166 iind(2)=i+1; jind(2)=j
167 iind(3)=i+1; jind(3)=j+1
168 iind(4)=i ; jind(4)=j+1
171 elseif ( isorted(1)==i .and. jsorted(1)==j+1 )
then 172 if ( isorted(2)==i+1 .and. jsorted(2)==j )
then 173 isorted(2)=isorted(3); jsorted(2)=jsorted(3)
175 if ( isorted(2)==i+1 .and. jsorted(2)==j+1 )
then 176 iind(1)=i ; jind(1)=j+1
177 iind(2)=i+1; jind(2)=j+1
178 iind(3)=i+1; jind(3)=j
179 iind(4)=i ; jind(4)=j
180 elseif ( isorted(2)==i .and. jsorted(2)==j )
then 181 iind(1)=i ; jind(1)=j+1
182 iind(2)=i ; jind(2)=j
183 iind(3)=i+1; jind(3)=j
184 iind(4)=i+1; jind(4)=j+1
187 elseif ( isorted(1)==i+1 .and. jsorted(1)==j+1 )
then 188 if ( isorted(2)==i .and. jsorted(2)==j )
then 189 isorted(2)=isorted(3); jsorted(2)=jsorted(3)
191 if ( isorted(2)==i+1 .and. jsorted(2)==j )
then 192 iind(1)=i+1; jind(1)=j+1
193 iind(2)=i+1; jind(2)=j
194 iind(3)=i ; jind(3)=j
195 iind(4)=i ; jind(4)=j+1
196 elseif ( isorted(2)==i .and. jsorted(2)==j+1 )
then 197 iind(1)=i+1; jind(1)=j+1
198 iind(2)=i ; jind(2)=j+1
199 iind(3)=i ; jind(3)=j
200 iind(4)=i+1; jind(4)=j
203 elseif ( isorted(1)==i+1 .and. jsorted(1)==j )
then 204 if ( isorted(2)==i .and. jsorted(2)==j+1 )
then 205 isorted(2)=isorted(3); jsorted(2)=jsorted(3)
207 if ( isorted(2)==i .and. jsorted(2)==j )
then 208 iind(1)=i+1; jind(1)=j
209 iind(2)=i ; jind(2)=j
210 iind(3)=i ; jind(3)=j+1
211 iind(4)=i+1; jind(4)=j+1
212 elseif ( isorted(2)==i+1 .and. jsorted(2)==j+1 )
then 213 iind(1)=i+1; jind(1)=j
214 iind(2)=i+1; jind(2)=j+1
215 iind(3)=i ; jind(3)=j+1
216 iind(4)=i ; jind(4)=j
233 subroutine sorted_intb(isd, ied, jsd, jed, is, ie, js, je, npx, npy, &
234 cubed_sphere, agrid, iintb, jintb)
235 integer,
intent(in) :: isd, ied, jsd, jed, is, ie, js, je, npx, npy
236 real(kind=R_GRID),
intent(in),
dimension(isd:ied,jsd:jed,2) :: agrid
237 logical,
intent(in) :: cubed_sphere
239 integer,
dimension(4,is:ie+1,js:je+1),
intent(out) :: iintb, jintb
243 real,
dimension(4) :: xsort, ysort, xsorted, ysorted
244 integer,
dimension(4) :: isort, jsort, isorted, jsorted
245 integer :: i, j, l, ll, lll
249 if (cubed_sphere)
then 255 xsort(1)=agrid(i ,j ,1); ysort(1)=agrid(i ,j ,2); isort(1)=i ; jsort(1)=j
256 xsort(2)=agrid(i ,j-1,1); ysort(2)=agrid(i ,j-1,2); isort(2)=i ; jsort(2)=j-1
257 xsort(3)=agrid(i-1,j-1,1); ysort(3)=agrid(i-1,j-1,2); isort(3)=i-1; jsort(3)=j-1
258 xsort(4)=agrid(i-1,j ,1); ysort(4)=agrid(i-1,j ,2); isort(4)=i-1; jsort(4)=j
265 if ( (is==1) .and. (js==1) )
then 268 xsort(1)=agrid(i ,j ,1); ysort(1)=agrid(i ,j ,2); isort(1)=i ; jsort(1)=j
269 xsort(2)=agrid(i ,j-1,1); ysort(2)=agrid(i ,j-1,2); isort(2)=i ; jsort(2)=j-1
270 xsort(3)=agrid(i-1,j ,1); ysort(3)=agrid(i-1,j ,2); isort(3)=i-1; jsort(3)=j
272 iintb(4,i,j)=i-1; jintb(4,i,j)=j-1
275 if ( (ie+1==npx) .and. (js==1) )
then 278 xsort(1)=agrid(i ,j ,1); ysort(1)=agrid(i ,j ,2); isort(1)=i ; jsort(1)=j
279 xsort(2)=agrid(i-1,j ,1); ysort(2)=agrid(i-1,j ,2); isort(2)=i-1; jsort(2)=j
280 xsort(3)=agrid(i-1,j-1,1); ysort(3)=agrid(i-1,j-1,2); isort(3)=i-1; jsort(3)=j-1
282 iintb(4,i,j)=i; jintb(4,i,j)=j-1
285 if ( (ie+1==npx) .and. (je+1==npy) )
then 288 xsort(1)=agrid(i-1,j-1,1); ysort(1)=agrid(i-1,j-1,2); isort(1)=i-1; jsort(1)=j-1
289 xsort(2)=agrid(i ,j-1,1); ysort(2)=agrid(i ,j-1,2); isort(2)=i ; jsort(2)=j-1
290 xsort(3)=agrid(i-1,j ,1); ysort(3)=agrid(i-1,j ,2); isort(3)=i-1; jsort(3)=j
292 iintb(4,i,j)=i; jintb(4,i,j)=j
295 if ( (is==1) .and. (je+1==npy) )
then 298 xsort(1)=agrid(i ,j ,1); ysort(1)=agrid(i ,j ,2); isort(1)=i ; jsort(1)=j
299 xsort(2)=agrid(i-1,j-1,1); ysort(2)=agrid(i-1,j-1,2); isort(2)=i-1; jsort(2)=j-1
300 xsort(3)=agrid(i ,j-1,1); ysort(3)=agrid(i ,j-1,2); isort(3)=i ; jsort(3)=j-1
302 iintb(4,i,j)=i-1; jintb(4,i,j)=j
310 iintb(1,i,j)=i ; jintb(1,i,j)=j
311 iintb(2,i,j)=i ; jintb(2,i,j)=j-1
312 iintb(3,i,j)=i-1; jintb(3,i,j)=j-1
313 iintb(4,i,j)=i-1; jintb(4,i,j)=j
322 integer,
dimension(4),
intent(inout) :: iind, jind
326 real,
dimension(4) :: xsorted, ysorted
327 integer,
dimension(4) :: isorted, jsorted
338 if (xsort(l)<xsorted(ll))
then 340 xsorted(lll+1)=xsorted(lll)
341 ysorted(lll+1)=ysorted(lll)
342 isorted(lll+1)=isorted(lll)
343 jsorted(lll+1)=jsorted(lll)
357 xsort(l)=xsorted(l); ysort(l)=ysorted(l)
358 isort(l)=isorted(l); jsort(l)=jsorted(l)
367 if (ysort(l)<ysorted(ll))
then 369 xsorted(lll+1)=xsorted(lll)
370 ysorted(lll+1)=ysorted(lll)
371 isorted(lll+1)=isorted(lll)
372 jsorted(lll+1)=jsorted(lll)
385 if ( isorted(1)==i .and. jsorted(1)==j )
then 386 if ( isorted(2)==i-1 .and. jsorted(2)==j-1 )
then 387 isorted(2)=isorted(3); jsorted(2)=jsorted(3)
389 if ( isorted(2)==i .and. jsorted(2)==j-1 )
then 390 iind(1)=i ; jind(1)=j
391 iind(2)=i ; jind(2)=j-1
392 iind(3)=i-1; jind(3)=j-1
393 iind(4)=i-1; jind(4)=j
394 elseif ( isorted(2)==i-1 .and. jsorted(2)==j )
then 395 iind(1)=i ; jind(1)=j
396 iind(2)=i-1; jind(2)=j
397 iind(3)=i-1; jind(3)=j-1
398 iind(4)=i ; jind(4)=j-1
401 elseif ( isorted(1)==i .and. jsorted(1)==j-1 )
then 402 if ( isorted(2)==i-1 .and. jsorted(2)==j )
then 403 isorted(2)=isorted(3); jsorted(2)=jsorted(3)
405 if ( isorted(2)==i-1 .and. jsorted(2)==j-1 )
then 406 iind(1)=i ; jind(1)=j-1
407 iind(2)=i-1; jind(2)=j-1
408 iind(3)=i-1; jind(3)=j
409 iind(4)=i ; jind(4)=j
410 elseif ( isorted(2)==i .and. jsorted(2)==j )
then 411 iind(1)=i ; jind(1)=j-1
412 iind(2)=i ; jind(2)=j
413 iind(3)=i-1; jind(3)=j
414 iind(4)=i-1; jind(4)=j-1
417 elseif ( isorted(1)==i-1 .and. jsorted(1)==j-1 )
then 418 if ( isorted(2)==i .and. jsorted(2)==j )
then 419 isorted(2)=isorted(3); jsorted(2)=jsorted(3)
421 if ( isorted(2)==i-1 .and. jsorted(2)==j )
then 422 iind(1)=i-1; jind(1)=j-1
423 iind(2)=i-1; jind(2)=j
424 iind(3)=i ; jind(3)=j
425 iind(4)=i ; jind(4)=j-1
426 elseif ( isorted(2)==i .and. jsorted(2)==j-1 )
then 427 iind(1)=i-1; jind(1)=j-1
428 iind(2)=i ; jind(2)=j-1
429 iind(3)=i ; jind(3)=j
430 iind(4)=i-1; jind(4)=j
433 elseif ( isorted(1)==i-1 .and. jsorted(1)==j )
then 434 if ( isorted(2)==i .and. jsorted(2)==j-1 )
then 435 isorted(2)=isorted(3); jsorted(2)=jsorted(3)
437 if ( isorted(2)==i .and. jsorted(2)==j )
then 438 iind(1)=i-1; jind(1)=j
439 iind(2)=i ; jind(2)=j
440 iind(3)=i ; jind(3)=j-1
441 iind(4)=i-1; jind(4)=j-1
442 elseif ( isorted(2)==i-1 .and. jsorted(2)==j-1 )
then 443 iind(1)=i-1; jind(1)=j
444 iind(2)=i-1; jind(2)=j-1
445 iind(3)=i ; jind(3)=j-1
446 iind(4)=i ; jind(4)=j
464 if (xsort(l)<xsorted(ll))
then 466 xsorted(lll+1)=xsorted(lll)
467 ysorted(lll+1)=ysorted(lll)
468 isorted(lll+1)=isorted(lll)
469 jsorted(lll+1)=jsorted(lll)
483 xsort(l)=xsorted(l); ysort(l)=ysorted(l)
484 isort(l)=isorted(l); jsort(l)=jsorted(l)
493 if (ysort(l)<ysorted(ll))
then 495 xsorted(lll+1)=xsorted(lll)
496 ysorted(lll+1)=ysorted(lll)
497 isorted(lll+1)=isorted(lll)
498 jsorted(lll+1)=jsorted(lll)
511 iintb(1,i,j)=isorted(1) ; jintb(1,i,j)=jsorted(1)
512 iintb(2,i,j)=isorted(2) ; jintb(2,i,j)=jsorted(2)
513 iintb(3,i,j)=isorted(3) ; jintb(3,i,j)=jsorted(3)
The module 'sorted_index' sorts cell corner indices in lat-lon space to ensure the same order of oper...
subroutine, public sorted_intb(isd, ied, jsd, jed, is, ie, js, je, npx, npy, cubed_sphere, agrid, iintb, jintb)
The subroutine 'sorted_intb' sorts cell corner indices in latlon space based on grid locations in ind...
integer, parameter, public r_grid
subroutine sort_triangle()
subroutine sort_rectangle(iind, jind)
The module 'fv_arrays' contains the 'fv_atmos_type' and associated datatypes.
subroutine, public sorted_inta(isd, ied, jsd, jed, cubed_sphere, bgrid, iinta, jinta)
The subroutine 'sorted_inta' sorts cell corner indices in latlon space based on grid locations in ind...