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.

302 Unità di Programma<br />

matrix al fine di poter lavorare, all’esterno del modulo, con comuni array reali ma di passarli<br />

poi come array di tipo matrix alle procedure di modulo definenti nuovi operatori. Ciò può<br />

essere fatto aggiungendo al modulo operatori l’interfaccia seguente:<br />

INTERFACE ASSIGNMENT(=)<br />

MODULE PROCEDURE matrix_from_real, matrix_from_matrix, &<br />

vector_from_real, vector_from_vector<br />

END INTERFACE<br />

e le seguenti procedure:<br />

!<br />

! Operatori di assegnazione: X = Y<br />

!<br />

SUBROUTINE matrix_from_real(X,Y)<br />

! Copia un array 2D di tipo REAL in un array 2D di tipo matrix<br />

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

TYPE(matrix), INTENT(OUT), DIMENSION(SIZE(Y,1),SIZE(Y,2)) :: X<br />

X(:,:)%elem = Y(:,:)<br />

END SUBROUTINE matrix_from_real<br />

SUBROUTINE matrix_from_matrix(X, Y)<br />

! Copia un array 2D di tipo matrix<br />

TYPE(matrix), INTENT(IN), DIMENSION(:,:) :: Y<br />

TYPE(matrix), INTENT(OUT), DIMENSION(SIZE(Y,1),SIZE(Y,2)) :: X<br />

X(:,:)%elem = Y(:,:)%elem<br />

END SUBROUTINE matrix_from_matrix<br />

SUBROUTINE vector_from_real(X, Y)<br />

! Copia un array 1D di tipo REAL in un array 1D di tipo matrix<br />

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

TYPE(matrix), INTENT(OUT), DIMENSION(SIZE(Y,1)) :: X<br />

X(:)%elem = Y(:)<br />

END SUBROUTINE vector_from_real<br />

SUBROUTINE vector_from_vector(X, Y)<br />

! Copia un array 1D di tipo matrix<br />

TYPE(matrix), INTENT(IN), DIMENSION(:) :: Y<br />

TYPE(matrix), INTENT(OUT), DIMENSION(SIZE(Y,1)) :: X<br />

X(:)%elem = Y(:)%elem<br />

END SUBROUTINE vector_from_vector

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

Saved successfully!

Ooh no, something went wrong!