One point that Jim makes is that a datatype containing actual
addresses is invalid for this function. I do see any reason for
the restriction. Absolute addresses are simply offsets from
MPI_BOTTOM and so the LB and UB values would tend to be large
(or in my version, the virtual origin would be a large negative number).
The true extent would still be (ub-lb) and a temp buffer could be
allocated and used.
An example with MPI_TRUE_EXTENT(dt,true_extent,virt_org) would be
MPI_True_extent(dt,&true_extent,&virt_org);
tempbuf = (char*) malloc(true_extent);
MPI_Recv(tempbuf+virt_org,.........);
... do whatever ....
free(tempbuf);
In the virtual origin approach, a datatype where true_lb is a
positive offset, virtual origin would be a negative number while
a datatype which had a negative true_lb would give a positive
virtual origin. 90% of datatypes (a guess) would return a
virtual origin of zero.
Dick Treumann