Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

Help With EOSHIFT

Ernie_P_1
Débutant
782 Visites

Hi,

I have an array as follows:
ARRAY1(50,78)

I want to perform an EOSHIFT for only one value of dimension 1. For example, I want to shift all of the following values:

ARRAY1(16,1:78)

My example has 16 but I want this to be dynamic. I want to leave all other values unchanged. ARRAY1(1:15,1:78) and ARRAY1(17:50,1:78) should be unchanged.

I think I can use this:

INTEGER SHIFT(50)
INTEGER MY_INT
SHIFT=0
MY_INT = 16
SHIFT(MY_INT) = 1
ARRAY1 = EOSHIFT(ARRAY1, SHIFT, DIM=2)

I'm pretty sure this will work butis therea more efficient way?
Can I eliminate the SHIFT array with 50 elements?

Thanks,
Ernie P.

0 Compliments
1 Solution
IanH
Contributeur émérite III
782 Visites
Perhaps
[fortran]array1(my_int,:) = EOSHIFT(array1(my_int,:), 1)[/fortran]
The compiler may (?) still create temporary arrays for the expression and assignment, but at least it's reasonably clear from the line of source what your intent is.

Voir la solution dans l'envoi d'origine

0 Compliments
2 Réponses
IanH
Contributeur émérite III
783 Visites
Perhaps
[fortran]array1(my_int,:) = EOSHIFT(array1(my_int,:), 1)[/fortran]
The compiler may (?) still create temporary arrays for the expression and assignment, but at least it's reasonably clear from the line of source what your intent is.
0 Compliments
Ernie_P_1
Débutant
782 Visites

IanH,

Works. Thanks a lot!

Ernie P.

0 Compliments
Répondre