RPN_COMM |
(RPN_COMM_compress) |
subroutine RPN_COMM_compress(array,minx,maxx,miny,maxy,nil,njl,nk)subroutine RPN_COMM_compress8(array,minx,maxx,miny,maxy,nil,njl,nk)subroutine RPN_COMM_expand(array8,minx,maxx,miny,maxy,nil,njl,nk)subroutine RPN_COMM_expand8(array8,minx,maxx,miny,maxy,nil,njl,nk)
OUT
array, avec le contenu du vecteur compressé ou étendu
Compresse le contenu d'un tableau en le débarassant de son halo "physique".
Typiquement, le tableau en entrée aura la forme suivante (cas k=1):
+---------+
| |
| +-----+ |
| |ni*nj| | -> (maxx-minx+1)*(maxy*miny+1)
| O-----+ | +---------+----------+-------+-------+
| | |ni*nj k=1| ni*nj
k=2|...k=nk| |
+---------+ +---------+----------+-------+-------+
Le point "O" est l'origine (point (1,1)), le tableau externe est de dimension minx:maxx, miny:maxy et le tableau interne est de dimension ni,nj. La compression réécrit le tableau interne dans le tableau externe de façon à ce que les ni*nj*nk points soient consécutifs dans le tableau de (maxx-minx+1)*(maxy*miny+1). On peut ainsi récupérer (maxx-minx+1)*(maxy*miny+1)-ni*nj*nk espaces en mémoire. L'appel à compress8 fait le travail pour des doubles précision.
Dans le cas d'une expansion, on procéde de la façon inverse,
en plaçant les points d'un tableau ni*nj*nk dans un tableau minx:maxx,
miny:maxy, nk en commençant par l'origine (indice (1,1,1)). L'appel
à expand8 fait le travail pour des doubles précisions.