LOGICAL PERIODS(*)
Ihemq_gb_ bgnhjfZpbbh ^_dZjlh\hclhiheh]bbdhffmgbdZlhjZ
COMM
bdh
-
hj^bgZlZo\g_c\ua\Z\r_]hijhp_kkZ
MAXDIMS
aZ^Z_ljZaf_jghklv^_dZjlh
-
\hc lhiheh]bb < iZjZf_lj_
DIMS
\ha\jZsZ_lky dhebq_kl\h ijhp_kkh\ ^ey
dZ`^h]hbaf_j_gby\iZjZf_lj_
PERIODS
–
i_jbh^bqghklvihdZ`^hfmbaf_
-
j_gbx\iZjZf_lj_
COORDS
–
dhhj^bgZlu\ua\Z\r_]hijhp_kkZ\^_dZjlh\hc
lhiheh]bb
MPI_CART_SHIFT(COMM, DIRECTION, DISP, SOURCE, DEST, IERR)
INTEGER COMM, DIRECTION, DISP, SOURCE, DEST, IERR
Ihemq_gb_ghf_jh\ihkueZxs_]h
SOURCE
bijbgbfZxs_]h
DEST
ijhp_k
-
kh\\^_dZjlh\hclhiheh]bbdhffmgbdZlhjZ
COMM
^eyhkms_kl\e_gbyk^\b]Z
\^hevbaf_j_gby
DIRECTION
gZ\_ebqbgm
DISP
.
>eyi_jbh^bq_kdbobaf_j_gbchkms_kl\ey_lkypbdebq_kdbck^\b]^eyg_i_
-
jbh^bq_kdbo
–
ebg_cguc k^\b] < kemqZ_ ebg_cgh]h k^\b]Z gZ g_dhlhjuo
ijhp_kkZo \ dZq_kl\_ ghf_jh\ ihkueZxs_]h beb ijbgbfZxs_]h ijhp_kkh\
fh`_l [ulv ihemq_gh agZq_gb_
MPI_PROC_NULL
hagZqZxs__ \uoh^ aZ ]jZ
-
gbpu ^bZiZahgZ < kemqZ_ pbdebq_kdh]h k^\b]Z ihke_^gbc ijhp_kk ih
^Zgghfm baf_j_gbx hkms_kl\ey_l h[f_gu k gme_\uf ijhp_kkhf >ey
n
-
f_jghc^_dZjlh\hcj_r_ldbagZq_gb_
DIRECTION
^he`gh[ulv\ij_^_eZohl
0
^h
n-1
.
AgZq_gby
SOURCE
b
DEST
fh`ghbkihevah\ZlvgZijbf_j^eyh[f_gZkihfh
-
svxijhp_^mju
MPI_SENDRECV
.
< ke_^mxs_f ijbf_j_ kha^Z_lky ^\mf_jgZy ^_dZjlh\Z j_r_ldZ i_jbh^bq_
-
kdZyihh[hbfbaf_j_gbyfhij_^_eyxlkydhhj^bgZluijhp_kkZ\^Zgghcj_
-
r_ld_ Ihlhf ijb ihfhsb ijhp_^mju
MPI_CART_SHIFT
\uqbkeyxlky dhhj
-
^bgZluijhp_kkh\kdhlhjufbgm`ghkh\_jrblvh[f_g^Zggufb^eyhkms_
-
kl\e_gbypbdebq_kdh]hk^\b]ZkrZ]hf
2
ihbaf_j_gbx
1
<dhgp_njZ]f_glZ
ihemq_ggu_agZq_gbyghf_jh\ijhp_kkh\bkihevamxlky^eyh[f_gZ^Zggufb
ijbihfhsbijhp_^mju
MPI_SENDRECV_REPLACE
.
periods(1) = .TRUE.
periods(2) = .TRUE.
call MPI_CART_CREATE(MPI_COMM_WORLD, 2, dims,
& periods, .TRUE., comm, ierr)
call MPI_COMM_RANK(comm, rank, ierr)
call MPI_CART_COORDS(comm, rank, 2, coords, ierr)
shift = 2
dest = 1
call MPI_CART_SHIFT(comm, 0, shift, source, dest, ierr)
call MPI_SENDRECV_REPLACE(a, 1, MPI_REAL, dest, 0,
& source, 0, comm, status, ierr)