count = 2
blocklen = 3
stride = 5
call MPI_TYPE_VECTOR(count, blocklen, stride,
& MPI_REAL, newtype, ierr)
MPI_TYPE_HVECTOR(COUNT, BLOCKLEN, STRIDE, TYPE, NEWTYPE, IERR)
INTEGER COUNT, BLOCKLEN, STRIDE, TYPE, NEWTYPE, IERR
Kha^Zgb_ gh\h]h lbiZ ^Zgguo
NEWTYPE
khklhys_]h ba
COUNT
[ehdh\ ih
BLOCKLEN
we_f_glh\ [Zah\h]h lbiZ ^Zgguo
TYPE
Ke_^mxsbc [ehd gZqbgZ
-
_lkyq_j_a
STRIDE
[Zclihke_gZqZeZij_^u^ms_]h[ehdZ
MPI_TYPE_INDEXED(COUNT, BLOCKLENS, DISPLS, TYPE, NEWTYPE, IERR)
INTEGER COUNT, BLOCKLENS(*), DISPLS(*), TYPE, NEWTYPE, IERR
Kha^Zgb_ gh\h]h lbiZ ^Zgguo
NEWTYPE
khklhys_]h ba
COUNT
[ehdh\ ih
BLOCKLENS(I)
we_f_glh\ [Zah\h]h lbiZ ^Zgguo
I
-
c [ehd gZqbgZ_lky q_j_a
DISPLS(I)
we_f_glh\[Zah\h]hlbiZ^ZgguokgZqZeZ[mn_jZihkuedbIhem
-
q_gguclbi^Zgguofh`ghkqblZlvh[h[s_gb_f\_dlhjgh]hlbiZ
< ke_^mxs_f ijbf_j_ aZ^Z_lky lbi ^Zgguo
newtype
^ey hibkZgby gb`g_
-
lj_m]hevghcfZljbpulbiZ
double precision
ijbwlhfmqblu\Z_lkyqlh\
yaud_NhjljZgfZkkb\uojZgylkyihklhe[pZf
do i = 1, n
blocklens(i) = n-i+1
displs(i) = n*(i-1)+i-1
end do
call MPI_TYPE_INDEXED(n, blocklens, displs,
MPI_DOUBLE_PRECISION, newtype, ierr)
MPI_TYPE_HINDEXED(COUNT, BLOCKLENS, DISPLS, TYPE, NEWTYPE, IERR)
INTEGER COUNT, BLOCKLENS(*), DISPLS(*), TYPE, NEWTYPE, IERR
Kha^Zgb_ gh\h]h lbiZ ^Zgguo
NEWTYPE
khklhys_]h ba
COUNT
[ehdh\ ih
BLOCKLENS(I)
we_f_glh\ [Zah\h]h lbiZ ^Zgguo
I
-
c [ehd gZqbgZ_lky q_j_a
DISPLS(I)
[ZclkgZqZeZ[mn_jZihkuedb
MPI_TYPE_STRUCT(COUNT, BLOCKLENS, DISPLS, TYPES, NEWTYPE, IERR)
INTEGER COUNT, BLOCKLENS(*), DISPLS(*), TYPES(*), NEWTYPE, IERR
Kha^Zgb_ kljmdlmjgh]h lbiZ ^Zgguo
NEWTYPE
ba
COUNT
[ehdh\ ih
BLOCKLENS(I)
we_f_glh\ lbiZ
TYPES(I)
.
I
-
c [ehd gZqbgZ_lky q_j_a
DISPLS(I)
[ZclkgZqZeZ[mn_jZihkuedb
<ke_^mxs_fijbf_j_kha^Z_lkygh\uclbi^Zgguo
newtype
dhlhjucihke_
j_]bkljZpbbfh`_l[ulvbkihevah\Zg^eyi_j_kuedbdZd_^bgh]hp_eh]hiylb
we_f_glh\ ^Zgguo dhlhju_ fh`gh ij_^klZ\blv ke_^mxsbf h[jZahflbi
we_f_glZ^Zgguodhebq_kl\h[ZclhlgZqZeZ[mn_jZihkuedb
{(
MPI_DOUBLE_PRECISION
,
0
), (
MPI_DOUBLE_PRECISION
,
8
),