25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

342 Array Processing<br />

0 8 0<br />

0 0 0<br />

7 0 0<br />

allora l’istruzione:<br />

PACK(mat,MASK=mat/=0,VECTOR=(/1,3,5,9,11,13/))<br />

produrrà il risultato: (/7,8,5,9,11,13/), mentre l’istruzione:<br />

PACK(mat,MASK=mat/=0)<br />

fornirà come risultato il vettore (/7,8/).<br />

Un più interessante impiego della funzione in oggetto è offerto dalla seguente subroutine il<br />

cui compito è quello di estrarre gli eleemnti della diagonale principale da una matrice quadrata<br />

di input:<br />

SUBROUTINE Matrix_Diagonal(A,diag,n)<br />

! Scopo: estrarre la diagonale principale<br />

! da una matrice quadrata A di n elementi<br />

IMPLICIT NONE<br />

REAL, INTENT(IN), DIMENSION(:,:) :: A<br />

REAL, INTENT(OUT), DIMENSION(:) :: diag<br />

INTEGER, INTENT(IN) :: n<br />

REAL, DIMENSION (1:SIZE(A,1)*SIZE(A,1)) :: temp<br />

!<br />

IF(SIZE(A,1)==N .AND. SIZE(A,2)==N) THEN<br />

temp = PACK(A,.TRUE.)<br />

diag = temp(1:n*n:n+1)<br />

ELSE<br />

PRINT*, "La matrice A non e’ quadrata"<br />

PRINT*, "Impossibile estrarre la diagonale"<br />

END IF<br />

RETURN<br />

END SUBROUTINE Matrix_Diagonal<br />

SPREAD(SOURCE,DIM,NCOPIES)<br />

Crea un array ”replicato” con una dimensione aggiuntiva eseguendo copie degli elementi esistenti<br />

lungo una dimensione specificata.<br />

SOURCE è uno scalare o un array di tipo qualsiasi (nel caso di array, il rango deve essere<br />

minore di 7).<br />

DIM è uno scalare di tipo INTEGER con valore compreso tra 1 ed n +1, essendo n il rango di<br />

SOURCE.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!