Hi:
I’am coding a series of performance critical routines in Fortran 90
(pgf90 and mpif90), which were previously coded in Fortran 77. Basically
it is mostly loop and artimetic stuff with arrays.
In the original Fortran 77 we used only explicit shape, one dimensional
arrays like X(1:n).
In the new version we would like to use twodimensional arrays of
basically two ‘types’ : Y(1:3,1:n) and Z(1:1,1:n).
( That is because we want Y(1,j) Y(2,j) and Y(3,j) to be
contiguous in memory instead of having three separate
arrays Y1(1:n), Y2(1:n), Y3(1:n) )
The routines we are dealing with, would need to be called with either
Y or Z arrays as actual arguments, so we were planing to use assumed shape
dummy arguments like W(:,:).
Alternatively, we can code two different sets of routines, one set for
Y arrays (which have first dimension of size 3) and another set of
routines for Z arrays (which have first dimension of size 1). As stated
above performance is critical in these routines.
A few questions about expected performance:

In the best case scenario, would the performance using
assumed shape dummy argument arrays, match the performance
of using two sets of routines with explicit shape dummy arguments ? 
Will PGI shape propagation feature work OK for
a routine which is called with two different
shapes of the actual argument ( for example
a million times with shape (1:3,1:n) and another
two million times with shape (1:1,1:n) ) 
Any sugestions … ?
Thanks, Gabriel