73 integer,
intent(in) :: ng, tile, gtype, nghost
74 integer,
intent(in) :: my_im, my_jm
75 integer,
intent(in) :: my_lm, my_mm
76 integer,
intent(out) :: itile, jtile, lbi, ubi, lbj, ubj
80 integer :: imin, imax, jmin, jmax
82 integer :: iend, istr, jend, jstr
83 integer :: istrm, istrr, istru, iendr
84 integer :: jstrm, jstrr, jstrv, jendr
85 integer :: istrb, iendb, istrp, iendp, istrt, iendt
86 integer :: jstrb, jendb, jstrp, jendp, jstrt, jendt
87 integer :: istrm3, istrm2, istrm1, istrum2, istrum1
88 integer :: iendp1, iendp2, iendp2i, iendp3
89 integer :: jstrm3, jstrm2, jstrm1, jstrvm2, jstrvm1
90 integer :: jendp1, jendp2, jendp2i, jendp3
104 IF (mytype.eq.0)
THEN
183 & istr, iend, jstr, jend, &
184 & istrm, istrr, istru, iendr, &
185 & jstrm, jstrr, jstrv, jendr, &
186 & istrb, iendb, istrp, iendp, istrt, iendt, &
187 & jstrb, jendb, jstrp, jendp, jstrt, jendt, &
188 & istrm3, istrm2, istrm1, istrum2, istrum1, &
189 & iendp1, iendp2, iendp2i, iendp3, &
190 & jstrm3, jstrm2, jstrm1, jstrvm2, jstrvm1, &
191 & jendp1, jendp2, jendp2i, jendp3)
193 IF ((itile.eq.-1).or.(itile.eq.0))
THEN
198 IF ((itile.eq.-1).or.(itile.eq.(
ntilei(ng)-1)))
THEN
203 IF ((jtile.eq.-1).or.(jtile.eq.0))
THEN
208 IF ((jtile.eq.-1).or.(jtile.eq.(
ntilej(ng)-1)))
THEN
225 itile=tile-jtile*
ntilei(ng)
292 & epsilon, Lfullgrid, &
293 & Xmin, Xmax, Ymin, Ymax)
330 logical,
intent(in) :: lfullgrid
332 integer,
intent(in) :: ng, tile, gtype, nghost
333 integer,
intent(in) :: my_im, my_jm, my_lm, my_mm
335 real(r8),
intent(in) :: epsilon
336 real(r8),
intent(out) :: xmin, xmax, ymin, ymax
340 integer :: imin, imax, jmin, jmax
341 integer :: itile, jtile
351 & imin, imax, jmin, jmax)
356 IF ((itile.eq.0).and. &
361 xmin=real(imin,r8)-0.5_r8
363 IF (itile.eq.(
ntilei(ng)-1))
THEN
365 xmax=real(imax,r8)-0.5_r8
370 xmax=real(imax,r8)+0.5_r8
372 IF ((jtile.eq.0).and. &
377 ymin=real(jmin,r8)-0.5_r8
379 IF (jtile.eq.(
ntilej(ng)-1))
THEN
381 ymax=real(jmax,r8)-0.5_r8
386 ymax=real(jmax,r8)+0.5_r8
396 xmin=real(imin,r8)+0.5_r8
399 xmin=real(imin,r8)-0.5_r8
401 IF (itile.eq.(
ntilei(ng)-1))
THEN
403 xmax=real(imax,r8)-1.0_r8
405 xmax=real(imax,r8)-0.5_r8
408 xmax=real(imax,r8)+0.5_r8
414 ymin=real(jmin,r8)+0.5
417 ymin=real(jmin,r8)-0.5_r8
419 IF (jtile.eq.(
ntilej(ng)-1))
THEN
421 ymax=real(jmax,r8)-1.0_r8
423 ymax=real(jmax,r8)-0.5_r8
426 ymax=real(jmax,r8)+0.5_r8
433 IF (itile.eq.(
ntilei(ng)-1))
THEN
436 IF (jtile.eq.(
ntilej(ng)-1))
THEN
449 & NorthEast_Corner, &
450 & NorthWest_Corner, &
451 & SouthEast_Corner, &
452 & SouthWest_Corner, &
492 integer,
intent(in) :: ng, tile
493 integer,
intent(in) :: my_lm, my_mm
495 logical,
intent(out) :: eastern_edge
496 logical,
intent(out) :: western_edge
497 logical,
intent(out) :: northern_edge
498 logical,
intent(out) :: southern_edge
499 logical,
intent(out) :: northeast_corner
500 logical,
intent(out) :: northwest_corner
501 logical,
intent(out) :: southeast_corner
502 logical,
intent(out) :: southwest_corner
503 logical,
intent(out) :: northeast_test
504 logical,
intent(out) :: northwest_test
505 logical,
intent(out) :: southeast_test
506 logical,
intent(out) :: southwest_test
510 integer :: istr, iend, jstr, jend
511 integer :: itile, jtile
528 & istr, iend, jstr, jend)
549 southwest_test=.true.
550 southeast_test=.true.
551 northwest_test=.true.
552 northeast_test=.true.
554 southwest_corner=.true.
555 southeast_corner=.true.
556 northwest_corner=.true.
557 northeast_corner=.true.
569 IF (itile.eq.(
ntilei(ng)-1))
THEN
581 southern_edge=.false.
584 IF (jtile.eq.(
ntilej(ng)-1))
THEN
587 northern_edge=.false.
592 IF ((itile.eq.0).and. &
594 southwest_corner=.true.
595 southwest_test =.true.
597 southwest_corner=.false.
599 southwest_test =.true.
601 southwest_test =.false.
607 IF ((itile.eq.(
ntilei(ng)-1)).and. &
609 southeast_corner=.true.
610 southeast_test =.true.
612 southeast_corner=.false.
614 southeast_test =.true.
616 southeast_test =.false.
622 IF ((itile.eq.0).and. &
623 & (jtile.eq.(
ntilej(ng)-1)))
THEN
624 northwest_corner=.true.
625 northwest_test =.true.
627 northwest_corner=.false.
629 northwest_test =.true.
631 northwest_test =.false.
637 IF ((itile.eq.(
ntilei(ng)-1)).and. &
638 & (jtile.eq.(
ntilej(ng)-1)))
THEN
639 northeast_corner=.true.
640 northeast_test =.true.
642 northeast_corner=.false.
644 northeast_test =.true.
646 northeast_test =.false.
655 & my_BOUNDS, my_IOBOUNDS)
710 integer,
intent(in) :: ng
711 integer,
intent(in) :: my_lm, my_mm
730 my_iobounds(ng) % ILB_psi = 1
731 my_iobounds(ng) % IUB_psi = my_lm+1
732 my_iobounds(ng) % JLB_psi = 1
733 my_iobounds(ng) % JUB_psi = my_mm+1
735 my_iobounds(ng) % ILB_rho = 0
736 my_iobounds(ng) % IUB_rho = my_lm+1
737 my_iobounds(ng) % JLB_rho = 0
738 my_iobounds(ng) % JUB_rho = my_mm+1
740 my_iobounds(ng) % ILB_u = 1
741 my_iobounds(ng) % IUB_u = my_lm+1
742 my_iobounds(ng) % JLB_u = 0
743 my_iobounds(ng) % JUB_u = my_mm+1
745 my_iobounds(ng) % ILB_v = 0
746 my_iobounds(ng) % IUB_v = my_lm+1
747 my_iobounds(ng) % JLB_v = 1
748 my_iobounds(ng) % JUB_v = my_mm+1
753 my_iobounds(ng) % IorJ = my_bounds(ng) % UBij - &
754 & my_bounds(ng) % LBij + 1
756 my_iobounds(ng) % xi_psi = my_iobounds(ng) % IUB_psi - &
757 & my_iobounds(ng) % ILB_psi + 1
758 my_iobounds(ng) % xi_rho = my_iobounds(ng) % IUB_rho - &
759 & my_iobounds(ng) % ILB_rho + 1
760 my_iobounds(ng) % xi_u = my_iobounds(ng) % IUB_u - &
761 & my_iobounds(ng) % ILB_u + 1
762 my_iobounds(ng) % xi_v = my_iobounds(ng) % IUB_v - &
763 & my_iobounds(ng) % ILB_v + 1
765 my_iobounds(ng) % eta_psi = my_iobounds(ng) % JUB_psi - &
766 & my_iobounds(ng) % JLB_psi + 1
767 my_iobounds(ng) % eta_rho = my_iobounds(ng) % JUB_rho - &
768 & my_iobounds(ng) % JLB_rho + 1
769 my_iobounds(ng) % eta_u = my_iobounds(ng) % JUB_u - &
770 & my_iobounds(ng) % JLB_u + 1
771 my_iobounds(ng) % eta_v = my_iobounds(ng) % JUB_v - &
772 & my_iobounds(ng) % JLB_v + 1
780 & Istr, Iend, Jstr, Jend, &
781 & IstrM, IstrR, IstrU, IendR, &
782 & JstrM, JstrR, JstrV, JendR, &
783 & IstrB, IendB, IstrP, IendP, IstrT, IendT, &
784 & JstrB, JendB, JstrP, JendP, JstrT, JendT, &
785 & Istrm3, Istrm2, Istrm1, IstrUm2, IstrUm1, &
786 & Iendp1, Iendp2, Iendp2i, Iendp3, &
787 & Jstrm3, Jstrm2, Jstrm1, JstrVm2, JstrVm1, &
788 & Jendp1, Jendp2, Jendp2i, Jendp3)
860 integer,
intent(in) :: ng, tile
861 integer,
intent(in) :: my_lm, my_mm
862 integer,
intent(out) :: itile, jtile
863 integer,
intent(out) :: iend, istr, jend, jstr
864 integer,
intent(out) :: istrm, istrr, istru, iendr
865 integer,
intent(out) :: jstrm, jstrr, jstrv, jendr
866 integer,
intent(out) :: istrb, iendb, istrp, iendp, istrt, iendt
867 integer,
intent(out) :: jstrb, jendb, jstrp, jendp, jstrt, jendt
868 integer,
intent(out) :: istrm3, istrm2, istrm1, istrum2, istrum1
869 integer,
intent(out) :: iendp1, iendp2, iendp2i, iendp3
870 integer,
intent(out) :: jstrm3, jstrm2, jstrm1, jstrvm2, jstrvm1
871 integer,
intent(out) :: jendp1, jendp2, jendp2i, jendp3
875 integer :: my_istr, my_iend, my_jstr, my_jend
899 & my_istr, my_iend, my_jstr, my_jend)
906 & my_istr, my_iend, my_jstr, my_jend, &
907 & istr, iend, jstr, jend, &
908 & istrm, istrr, istru, iendr, &
909 & jstrm, jstrr, jstrv, jendr, &
910 & istrb, iendb, istrp, iendp, istrt, iendt, &
911 & jstrb, jendb, jstrp, jendp, jstrt, jendt, &
912 & istrm3, istrm2, istrm1, istrum2, istrum1, &
913 & iendp1, iendp2, iendp2i, iendp3, &
914 & jstrm3, jstrm2, jstrm1, jstrvm2, jstrvm1, &
915 & jendp1, jendp2, jendp2i, jendp3)
944 integer,
intent(in) :: ng, tile, imax
945 integer,
intent(out) :: iend, istr
949 integer :: chunksize, margin, nnodes
956 chunksize=(imax+nnodes-1)/nnodes
957 margin=(nnodes*chunksize-imax)/2
959 IF (imax.ge.nnodes)
THEN
960 istr=1+tile*chunksize-margin
961 iend=istr+chunksize-1
973 & Istr, Iend, Jstr, Jend)
1007 integer,
intent(in) :: ng, tile, imax, jmax
1008 integer,
intent(out) :: itile, jtile
1009 integer,
intent(out) :: iend, istr, jend, jstr
1013 integer :: chunksizei, chunksizej, margini, marginj
1022 margini=(
ntilei(ng)*chunksizei-imax)/2
1023 marginj=(
ntilej(ng)*chunksizej-jmax)/2
1025 itile=tile-jtile*
ntilei(ng)
1029 istr=1+itile*chunksizei-margini
1030 iend=istr+chunksizei-1
1036 jstr=1+jtile*chunksizej-marginj
1037 jend=jstr+chunksizej-1
1046 & my_Istr, my_Iend, my_Jstr, my_Jend, &
1047 & Istr, Iend, Jstr, Jend, &
1048 & IstrM, IstrR, IstrU, IendR, &
1049 & JstrM, JstrR, JstrV, JendR, &
1050 & IstrB, IendB, IstrP, IendP, IstrT, IendT, &
1051 & JstrB, JendB, JstrP, JendP, JstrT, JendT, &
1052 & Istrm3, Istrm2, Istrm1, IstrUm2, IstrUm1, &
1053 & Iendp1, Iendp2, Iendp2i, Iendp3, &
1054 & Jstrm3, Jstrm2, Jstrm1, JstrVm2, JstrVm1, &
1055 & Jendp1, Jendp2, Jendp2i, Jendp3)
1129 integer,
intent(in) :: ng, tile
1130 integer,
intent(in) :: my_lm, my_mm
1131 integer,
intent(in) :: my_istr, my_iend, my_jstr, my_jend
1133 integer,
intent(out) :: iend, istr, jend, jstr
1134 integer,
intent(out) :: istrm, istrr, istru, iendr
1135 integer,
intent(out) :: jstrm, jstrr, jstrv, jendr
1136 integer,
intent(out) :: istrb, iendb, istrp, iendp, istrt, iendt
1137 integer,
intent(out) :: jstrb, jendb, jstrp, jendp, jstrt, jendt
1138 integer,
intent(out) :: istrm3, istrm2, istrm1, istrum2, istrum1
1139 integer,
intent(out) :: iendp1, iendp2, iendp2i, iendp3
1140 integer,
intent(out) :: jstrm3, jstrm2, jstrm1, jstrvm2, jstrvm1
1141 integer,
intent(out) :: jendp1, jendp2, jendp2i, jendp3
1382 IF (
domain(ng)%Western_Edge(tile))
THEN
1430 IF (
domain(ng)%Western_Edge(tile))
THEN
1440 istrm3=max(0,my_istr-3)
1448 IF (
domain(ng)%Western_Edge(tile))
THEN
1458 istrm2=max(0,my_istr-2)
1466 IF (
domain(ng)%Western_Edge(tile))
THEN
1476 istrum2=max(1,istru-2)
1484 IF (
domain(ng)%Western_Edge(tile))
THEN
1494 istrm1=max(1,my_istr-1)
1502 IF (
domain(ng)%Western_Edge(tile))
THEN
1512 istrum1=max(2,istru-1)
1522 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1560 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1570 iendp1=min(my_iend+1,my_lm)
1578 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1588 iendp2i=min(my_iend+2,my_lm)
1596 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1606 iendp2=min(my_iend+2,my_lm+1)
1614 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1624 iendp3=min(my_iend+3,my_lm+1)
1634 IF (
domain(ng)%Southern_Edge(tile))
THEN
1682 IF (
domain(ng)%Southern_Edge(tile))
THEN
1692 jstrm3=max(0,my_jstr-3)
1700 IF (
domain(ng)%Southern_Edge(tile))
THEN
1710 jstrm2=max(0,my_jstr-2)
1718 IF (
domain(ng)%Southern_Edge(tile))
THEN
1728 jstrvm2=max(1,jstrv-2)
1736 IF (
domain(ng)%Southern_Edge(tile))
THEN
1746 jstrm1=max(1,my_jstr-1)
1754 IF (
domain(ng)%Southern_Edge(tile))
THEN
1764 jstrvm1=max(2,jstrv-1)
1774 IF (
domain(ng)%Northern_Edge(tile))
THEN
1813 IF (
domain(ng)%Northern_Edge(tile))
THEN
1823 jendp1=min(my_jend+1,my_mm)
1831 IF (
domain(ng)%Northern_Edge(tile))
THEN
1841 jendp2i=min(my_jend+2,my_mm)
1849 IF (
domain(ng)%Northern_Edge(tile))
THEN
1859 jendp2=min(my_jend+2,my_mm+1)
1867 IF (
domain(ng)%Northern_Edge(tile))
THEN
1877 jendp3=min(my_jend+3,my_mm+1)
subroutine, public get_domain_edges(ng, tile, my_lm, my_mm, eastern_edge, western_edge, northern_edge, southern_edge, northeast_corner, northwest_corner, southeast_corner, southwest_corner, northeast_test, northwest_test, southeast_test, southwest_test)
subroutine, public get_tile(ng, tile, my_lm, my_mm, itile, jtile, istr, iend, jstr, jend, istrm, istrr, istru, iendr, jstrm, jstrr, jstrv, jendr, istrb, iendb, istrp, iendp, istrt, iendt, jstrb, jendb, jstrp, jendp, jstrt, jendt, istrm3, istrm2, istrm1, istrum2, istrum1, iendp1, iendp2, iendp2i, iendp3, jstrm3, jstrm2, jstrm1, jstrvm2, jstrvm1, jendp1, jendp2, jendp2i, jendp3)
subroutine, public get_bounds(ng, tile, gtype, nghost, my_im, my_jm, my_lm, my_mm, itile, jtile, lbi, ubi, lbj, ubj)
subroutine, public tile_bounds_2d(ng, tile, imax, jmax, itile, jtile, istr, iend, jstr, jend)
subroutine, public get_iobounds(ng, my_lm, my_mm, my_bounds, my_iobounds)
subroutine, public tile_bounds_1d(ng, tile, imax, istr, iend)
subroutine, public get_domain(ng, tile, gtype, nghost, my_im, my_jm, my_lm, my_mm, epsilon, lfullgrid, xmin, xmax, ymin, ymax)
subroutine, private var_bounds(ng, tile, my_lm, my_mm, my_istr, my_iend, my_jstr, my_jend, istr, iend, jstr, jend, istrm, istrr, istru, iendr, jstrm, jstrr, jstrv, jendr, istrb, iendb, istrp, iendp, istrt, iendt, jstrb, jendb, jstrp, jendp, jstrt, jendt, istrm3, istrm2, istrm1, istrum2, istrum1, iendp1, iendp2, iendp2i, iendp3, jstrm3, jstrm2, jstrm1, jstrvm2, jstrvm1, jendp1, jendp2, jendp2i, jendp3)
integer, parameter r3dvar
integer, parameter u3dvar
type(t_domain), dimension(:), allocatable domain
integer, parameter u2dvar
integer, dimension(:), allocatable ntilei
integer, parameter p2dvar
integer, parameter r2dvar
integer, parameter v2dvar
integer, parameter p3dvar
integer, parameter v3dvar
integer, dimension(:), allocatable ntilej
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
logical, dimension(:,:), allocatable compositegrid
integer, parameter isouth
logical, dimension(:), allocatable refinedgrid
integer, dimension(:), allocatable refinescale
integer, parameter inorth