See my comments at a similar question at another forum .
And an example at this link.
So one option you can consider is to take advantage of the Fortran facility where the target of a RANK-N array pointer can be a RANK-1 array. This can greatly simplify the code structure depending on your needs.
That is, elevate your code design a step higher so that the circumstances where you get into situations where you require subroutines with dummy arguments of different ranks are greatly diminished or eliminated altogether.