fortran 90 and computational science

Upload: corina-elena-miler

Post on 07-Apr-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/4/2019 Fortran 90 and Computational Science

    1/49

    P L

    F o r t r a n 9 0 a n d C o m p u t a t i o n a l

    S c i e n c e

    C o p y r i g h t ( C ) 1 9 9 1 , 1 9 9 2 , 1 9 9 3 , 1 9 9 4 , 1 9 9 5 b y t h e C o m p u t a t i o n a l S c i e n c e E d u c a t i o n P r o j e c t

    T h i s e l e c t r o n i c b o o k i s c o p y r i g h t e d , a n d p r o t e c t e d b y t h e c o p y r i g h t l a w s o f t h e U n i t e d S t a t e s .

    T h i s ( a n d a l l a s s o c i a t e d d o c u m e n t s i n t h e s y s t e m ) m u s t c o n t a i n t h e a b o v e c o p y r i g h t n o t i c e .

    I f t h i s e l e c t r o n i c b o o k i s u s e d a n y w h e r e o t h e r t h a n t h e p r o j e c t ' s o r i g i n a l s y s t e m , C S E P m u s t

    b e n o t i e d i n w r i t i n g ( e m a i l i s a c c e p t a b l e ) a n d t h e c o p y r i g h t n o t i c e m u s t r e m a i n i n t a c t .

    1 O v e r v i e w o f F o r t r a n 9 0

    T h e d i a g r a m i n F i g u r e 1 s h o w s t h e m a j o r c o m p o n e n t s o f F o r t r a n 9 0 1 ] , 2 ] . T h e s i z e o f e a c h

    s l i c e o f t h i s \ p i e " i s r o u g h l y p r o p o r t i o n a l t o t h e n u m b e r o f s y n t a x r u l e s n e e d e d t o d e s c r i b e

    t h e f e a t u r e s a s s o c i a t e d w i t h t h a t s l i c e , a n d h e n c e i s a m e a s u r e o f t h e s t r u c t u r a l c o m p l e x i t y o f

    t h o s e f e a t u r e s . ( T h e s e m e a s u r e s s h o u l d n o t , h o w e v e r , b e t a k e n a s a n i n d i c a t i o n o f c o n c e p t u a l

    o r s e m a n t i c c o m p l e x i t y n o r o f i m p l e m e n t a t i o n e o r t - s y n t a c t i c c o m p l e x i t y m a y o r m a y n o t

    b e r e l a t e d t o t h e s e o t h e r f o r m s o f c o m p l e x i t y . )

    F o r t r a n 7 7 F o r t r a n 9 0 i s a s u p e r - s e t o f F o r t r a n 7 7 - a l l s t a n d a r d F o r t r a n 7 7 p r o g r a m s a r e

    s t a n d a r d F o r t r a n 9 0 p r o g r a m s . F o r t r a n 9 0 t h e r e f o r e e n c o m p a s s e s a n d i s c o m p l e t e l y

    c o m p a t i b l e w i t h t h e e x i s t i n g F o r t r a n 7 7 c o m p u t a t i o n a l s c i e n c e i n f r a s t r u c t u r e .

    S o u r c e F o r m T o F o r t r a n 7 7 ' s ` x e d ' s o u r c e f o r m F o r t r a n 9 0 a d d s a n o t h e r s o u r c e f o r m ,

    c a l l e d ` f r e e ' s o u r c e f o r m , i n w h i c h t h e r e a r e n o c o l u m n d e p e n d e n c i e s . I n f r e e s o u r c e f o r m

    c o m m e n t s n e e d n o t s t a r t i n c o l u m n 1 a n d c o l u m n 6 i s n o t r e s e r v e d f o r c o n t i n u a t i o n

    c o n t i n u a t i o n i n f r e e s o u r c e f o r m i s i n d i c a t e d b y a t r a i l i n g a m p e r s a n d , o n t h e ` r s t '

    l i n e . I n b o t h s o u r c e f o r m s a n e x c l a m a t i o n p o i n t , ` ! ' , m a y b e u s e d t o i n i t i a t e e n d -

    o f - l i n e c o m m e n t s ( e . g . , f o l l o w i n g a s t a t e m e n t o n t h a t l i n e ) a n d a s e m i c o l o n m a y b e

    u s e d t o s e p a r a t e t w o s t a t e m e n t s o n t h e s a m e l i n e . A s i n F o r t r a n 7 7 , F o r t r a n 9 0 n a m e s

    ( o f v a r i a b l e s , p r o c e d u r e s , e t c . ) b e g i n w i t h a l e t t e r a n d c o n t a i n l e t t e r s a n d d i g i t s i n

    a d d i t i o n , n a m e s m a y h a v e u p t o 3 1 c h a r a c t e r s , m a y c o n t a i n u n d e r s c o r e , ` ' , c h a r a c t e r s ,

    a n d m a y c o n t a i n b o t h u p p e r a n d l o w e r c a s e l e t t e r s .

    C o n t r o l S t r u c t u r e s M i s s i n g f r o m F o r t r a n 7 7 i s a c o m p l e t e s e t o f m o d e r n c o n t r o l s t r u c t u r e s

    ( i t h a s o n l y I F - T H E N - E L S E - E N D I F ) t h i s i s r e m e d i e d i n F o r t r a n 9 0 w i t h t h e

  • 8/4/2019 Fortran 90 and Computational Science

    2/49

    2

    Fortran 77

    Control StructuresNumeric Processing

    Array Processing

    Pointers

    DataStructures

    DefinedTypes

    Procedures

    Modules

    Input/Output

    Obsolescent Features

    Source Form

    F i g u r e 1 : F o r t r a n 9 0

    a d d i t i o n o f D O - E N D D O a n d S E L E C T C A S E - E N D S E L E C T c o n t r o l s t r u c t u r e s .

    T h e C A S E c o n s t r u c t , w h i c h h a s t h e f o r m :

    S E L E C T C A S E ( e x p r e s s i o n )

    C A S E ( v a l u e - l i s t )

    C A S E ( v a l u e - l i s t )

    E N D S E L E C T

    p r o v i d e s \ p a r a l l e l " s e l e c t i o n c o n t r o l . I t o e r s n o i n c r e a s e i n s e m a n t i c p o w e r o v e r t h e

    I F ( \ s e q u e n t i a l " ) s e l e c t i o n c o n t r o l , b u t i n s i t u a t i o n s w h e r e i t t s t h e p r o b l e m C A S E

    o e r s c o m p u t a t i o n a l a d v a n t a g e s o v e r I F b e c a u s e o n l y o n e e x p r e s s i o n i s e v a l u a t e d .

    T h e n e w D O c o n s t r u c t i s l i k e l y t o b e e x t r e m e l y u s e f u l i n c o m p u t a t i o n a l s c i e n c e a p -

    p l i c a t i o n s . T h e r e a s o n i s t h a t , i n o r d e r t o r e a l i z e t h e c o m p u t a t i o n a l b e n e t s o f d a t a

    p a r a l l e l i s m , a g r e a t m a n y i n d e x e d d o l o o p s w i l l b e r e p l a c e d b y a r r a y o p e r a t i o n s . T h e

    e m p h a s i s i n t h e u s e o f l o o p s w i l l t h e r e f o r e s h i f t f r o m p r o c e s s i n g a r r a y s t o i n d e n i t e

    r e p e t i t i o n o p e r a t i o n s s u c h a s \ r e a d - t e s t - p r o c e s s " a n d \ w h i l e " r e p e t i t i o n . T h e t w o n e w

    f o r m s o f D O c o n s t r u c t a d d e d i n F o r t r a n 9 0 t h e r e f o r e a r e :

    D O D O W H I L E ( l o g i c a l - e x p r )

  • 8/4/2019 Fortran 90 and Computational Science

    3/49

    O v e r v i e w o f F o r t r a n 9 0 3

    . . . . . .

    I F ( l o g i c a l - e x p r ) E X I T E N D D O

    E N D D O

    I n d e x e d l o o p s m a y a l s o b e t e r m i n a t e d w i t h E N D D O , i n w h i c h c a s e t h e l o o p l a b e l i s

    n o t n e e d e d . ( L o o p l a b e l s a r e p e r m i t t e d , h o w e v e r , i n a l l t h r e e f o r m s o f D O c o n s t r u c t . )

    N u m e r i c P r o c e s s i n g T h i s w i l l b e d i s c u s s e d i n d e t a i l i n s e c t i o n 3 . T h e m a i n f e a t u r e s

    i n t h i s c a t e g o r y a r e t h e n u m e r i c r e p r e s e n t a t i o n m o d e l , m a n y i n t r i n s i c f u n c t i o n s t h a t

    r e t u r n u s e f u l m o d e l v a l u e s , t h e n u m e r i c k i n d s y s t e m , i n t r i n s i c f u n c t i o n s t h a t r e t u r n

    k i n d v a l u e s , a n d g e n e r i c o p e r a t i o n s .

    A r r a y P r o c e s s i n g T h i s w i l l b e d i s c u s s e d i n d e t a i l i n s e c t i o n 4 . A r r a y o p e r a t i o n s a r e o n e

    o f t h e m o s t s i g n i c a n t a s p e c t s o f F o r t r a n 9 0 .

    P o i n t e r s P o i n t e r s p r o v i d e t w o i m p o r t a n t c a p a b i l i t i e s i n F o r t r a n 9 0 - d y n a m i c d a t a s t r u c t u r e s

    a n d d y n a m i c a r r a y s . T h e l a t t e r i s e s p e c i a l l y i m p o r t a n t f o r c o m p u t a t i o n a l s c i e n c e

    b e c a u s e i t a l l o w s a r r a y s t o b e d y n a m i c a l l y a l l o c a t e d ( a n d r e a l l o c a t e d ) o f t h e p r o p e r

    s i z e a n d p r o v i d e s a m e a n s t o m i n i m i z e d a t a t r a n s f e r s w h e n p e r f o r m i n g o p e r a t i o n s o n

    v a r i a b l e a r r a y s e c t i o n s .

    B e c a u s e o f t h e a d v e r s e i m p a c t t h a t p o i n t e r s h a v e o n o p t i m i z a t i o n , a F o r t r a n 9 0 p o i n t e r

    m a y p o i n t o n l y t o ( a ) a d a t a o b j e c t e x p l i c i t l y d e c l a r e d a s a p o i n t e r t a r g e t , ( b ) a

    d y n a m i c a l l y c r e a t e d o b j e c t , o r ( c ) a n o t h e r p o i n t e r . T h i s m a k e s i t p o s s i b l e f o r s t a t i c

    s t o r a g e o p t i m i z a t i o n t e c h n o l o g y t o b e b e a p p l i e d t o d a t a t h a t h a s n e i t h e r t h e p o i n t e r

    n o r t a r g e t a t t r i b u t e s .

    S u c h p o i n t e r s m a y b e u s e d f o r a r r a y s w h o s e s i z e s a r e d e t e r m i n e d a t r u n t i m e , s u c h

    a s d y n a m i c a l l y a l l o c a t e d a r r a y s s u c h a r r a y s a r e d e c l a r e d a s \ d e f e r r e d s h a p e " a r r a y s ,

    i n w h i c h t h e r a n k i s s p e c i e d , a n d t h e r e b y x e d , b u t t h e e x t e n t i n e a c h d i m e n s i o n

    i s u n s p e c i e d a n d d y n a m i c . T h e s e d i m e n s i o n s w i l l b e d y n a m i c a l l y e s t a b l i s h e d l a t e r .

    T h e f o l l o w i n g e x a m p l e s i l l u s t r a t e s u c h d y n a m i c b e h a v i o r . ( T h e \ = > " i s t h e F o r t r a n

    9 0 s y n t a x f o r p o i n t e r a s s i g n m e n t , a n d t h e A L L O C A T E s t a t e m e n t i s u s e d f o r d y n a m i c

    a l l o c a t i o n o f s t o r a g e . )

    R E A L , T A R G E T : : B ( 1 0 0 , 1 0 0 ) ! A r r a y B h a s t h e t a r g e t a t t r i b u t e .

    R E A L , P O I N T E R : : U ( : , : ) , V ( : ) , W ( : , : ) ! D e c l a r a t i o n o f 3 p o i n t e r a r r a y s

    U = > B ( I : I + 2 , J : J + 2 ) ! U p o i n t s t o a 3 x 3 s e c t i o n o f B .

    A L L O C A T E ( W ( M , N ) ) ! D y n a m i c a l l y a l l o c a t e W , s i z e M x N

    V = > B ( : , J ) ! V p o i n t s t o t h e J t h c o l u m n o f B .

    V = > W ( I - 1 , 1 : N : 2 ) ! V c h a n g e d t o p o i n t t o ( p a r t o f )

    ! t h e I - 1 s t r o w o f W .

  • 8/4/2019 Fortran 90 and Computational Science

    4/49

    4

    D a t a S t r u c t u r e s A r r a y s a r e p r o b a b l y t h e m o s t i m p o r t a n t c o m p o s i t e d a t a o b j e c t s f o r c o m -

    p u t a t i o n a l s c i e n c e , b u t m o r e h e t e r o g e n e o u s o b j e c t s a r e n e c e s s a r y , i n c l u d i n g d y n a m i -

    c a l l y l i n k e d s t r u c t u r e s . I n t h e j a r g o n o f F o r t r a n 9 0 , s t r u c t u r e s a r e o b j e c t s o f u s e r -

    d e n e d t y p e , d i s c u s s e d b r i e y n e x t a n d i n m o r e d e t a i l i n s e c t i o n 5 o n p a g e 5 0 a n d

    s e c t i o n 6 o n p a g e 5 0 . D y n a m i c a l l y l i n k e d s t r u c t u r e s a r e p r o v i d e d b y e s s e n t i a l l y r e c u r -

    s i v e u s e r - d e n e d t y p e s :

    T h i s i s a n e x a m p l e o f a t y p e t h a t c o u l d b e u s e d f o r a d o u b l y - l i k e d l i s t s t r u c t u r e .

    R e c u r s i v e c o m p o n e n t s ( P R E V I O U S a n d N E X T i n t h i s e x a m p l e ) m u s t b e p o i n t e r s . I n

    g e n e r a l , a d e n e d t y p e m a y h a v e a n y n u m b e r a n d t y p e s o f c o m p o n e n t s .

    T Y P E L I S T

    R E A L : : D A T A

    T Y P E ( L I S T ) , P O I N T E R : : P R E V I O U S , N E X T

    E N D T Y P E L I S T

    U s e r - D e n e d T y p e s a n d O p e r a t o r s U s e r - d e n e d t y p e s a n d o p e r a t o r s , t o g e t h e r w i t h

    m o d u l e s , g i v e F o r t r a n 9 0 a n o u t s t a n d i n g d a t a a b s t r a c t i o n f a c i l i t y a n d c o r r e s p o n d -

    i n g s u p p o r t f o r t h i s a s p e c t o f o b j e c t o r i e n t e d p r o g r a m m i n g . A u s e r - d e n e d t y p e i s

    d e n e d w i t h t h e T Y P E - E N D T Y P E c o n s t r u c t , a n d o b j e c t s a r e d e c l a r e d i n a m a n -

    n e r a n a l o g o u s t o d e c l a r a t i o n o f o b j e c t s o f i n t r i n s i c t y p e . A s i m p l e e x a m p l e o f a t y p e

    d e n i t i o n a n d c o r r e s p o n d i n g o b j e c t d e c l a r a t i o n i s a s f o l l o w s .

    T Y P E R A T I O N A L ! T h i s d e f i n e s t h e t y p e R A T I O N A L .

    I N T E G E R : : N U M E R A T O R

    I N T E G E R : : D E N O M I N A T O R

    E N D T Y P E R A T I O N A L

    T Y P E ( R A T I O N A L ) : : X , Y ( 1 0 0 , 1 0 0 ) ! X a n d Y a r e v a r i a b l e s o f

    ! t y p e R A T I O N A L .

    T h i s m i g h t b e t h e t y p e d e n e d i n c o n n e c t i o n w i t h a c o m p l e t e r a t i o n a l a r i t h m e t i c

    d a t a a b s t r a c t i o n . S u c h a n a b s t r a c t i o n r e q u i r e s , i n a d d i t i o n t o t h e t y p e d e n i t i o n ,

    a n a p p r o p r i a t e s e t o f o p e r a t o r d e n i t i o n s . T h e s e a r e d o n e b y s p e c i f y i n g o p e r a t o r

    i n t e r f a c e s f o r u s e r - d e n e d f u n c t i o n s . T h e f o l l o w i n g e x a m p l e i l l u s t r a t e s e x t e n d i n g t h e

    \ + " o p e r a t o r t o a d d i t i o n b e t w e e n o b j e c t s o f t y p e R A T I O N A L .

    I N T E R F A C E O P E R A T O R ( + )

    F U N C T I O N R A T _ A D D ( X , Y )

    T Y P E ( R A T I O N A L ) : : R A T _ A D D

    T Y P E ( R A T I O N A L ) : : X , Y

    E N D F U N C T I O N R A T _ A D D

    E N D I N T E R F A C E

  • 8/4/2019 Fortran 90 and Computational Science

    5/49

    O v e r v i e w o f F o r t r a n 9 0 5

    M o r e d e t a i l s o n u s e r - d e n e d t y p e s a n d o p e r a t o r s w i l l b e d i s c u s s e d i n s e c t i o n s o f t h e

    n e x t r e l e a s e o f t h i s c h a p t e r .

    P r o c e d u r e s T o t h e F o r t r a n 7 7 p r o c e d u r e f a c i l i t i e s F o r t r a n 9 0 a d d s t h e f o l l o w i n g n e w f e a -

    t u r e s : f u n c t i o n r e s u l t s m a y b e a r r a y - v a l u e d o r s t r u c t u r e - v a l u e d ( o r b o t h ) , p r o c e d u r e s

    m a y b e r e c u r s i v e , a r g u m e n t s m a y b e o p t i o n a l o r i n t e n t - i n ( c a n ' t b e c h a n g e d i n t h e

    p r o c e d u r e ) , p r o c e d u r e s m a y b e i n t e r n a l t o o t h e r p r o g r a m u n i t s , a n d o t h e r s .

    A n i m p o r t a n t c o n c e p t n e w t o F o r t r a n 9 0 i s t h a t o f a n e x p l i c i t p r o c e d u r e i n t e r f a c e . T h i s

    m e a n s t h a t t h e i n t e r f a c e o f a p r o c e d u r e - t h a t i s , t h e d a t a t y p e s a n d o t h e r c h a r a c t e r i s t i c s

    o f t h e d u m m y a r g u m e n t s a n d ( i f t h e p r o c e d u r e i s a f u n c t i o n ) f u n c t i o n r e s u l t - i s k n o w n

    a t t h e p o i n t o f c a l l . E x p l i c i t i n t e r f a c e s p r o v i d e a l o n g l i s t o f b e n e t s a n d c a p a b i l i t i e s

    f o r e x a m p l e , a f u n c t i o n r e s u l t c a n b e a r r a y v a l u e d i f ( a n d o n l y i f ) t h e f u n c t i o n i n t e r f a c e

    i s e x p l i c i t w h e r e t h e f u n c t i o n i s c a l l e d . P r o c e d u r e i n t e r f a c e s m a y b e m a d e e x p l i c i t b y

    p r o v i d i n g a n i n t e r f a c e b l o c k f o r t h e p r o c e d u r e o r b y p l a c i n g t h e p r o c e d u r e d e n i t i o n

    i n t e r n a l t o t h e c a l l i n g p r o g r a m o r i n a m o d u l e u s e d b y t h e c a l l i n g p r o g r a m .

    O n e o f t h e m o s t o n e r o u s s o u r c e s o f p r o g r a m m i n g e r r o r s h i s t o r i c a l l y h a s b e e n t h e m i s -

    m a t c h i n g o f a r g u m e n t d a t a t y p e s a c r o s s p r o c e d u r e b o u n d a r i e s . S u c h e r r o r s , g u a r a n t e e d

    t o c o r r u p t r e s u l t s , a r e a m o n g t h e h a r d e s t t o d e b u g . U s e o f e x p l i c i t i n t e r f a c e s i s s i m p l e

    a n d p r e v e n t s t h i s p r o b l e m c o m p l e t e l y t h i s w i l l l i k e l y b e o n e o f t h e m o s t i m p o r t a n t

    p r a c t i c a l a p p l i c a t i o n s o f i n t e r f a c e b l o c k s .

    M o d u l e s F o r t r a n 9 0 h a s a n e w k i n d o f p r o g r a m u n i t , t h e m o d u l e , t h a t i s n e i t h e r p a r t o f

    F o r t r a n 7 7 n o r i n c l u d e d i n m o s t p r e - 9 0 F o r t r a n c o m p i l e r s . B e c a u s e o f t h i s l a c k o f

    i m p l e m e n t a t i o n h i s t o r y , a n d b e c a u s e m o d u l e s i m p o s e m o r e s o p h i s t i c a t e d n a m e m a n -

    a g e m e n t r e q u i r e m e n t s o n i m p l e m e n t a t i o n s , m o d u l e s h a v e t r i g g e r e d s o m e c o n t r o v e r s y .

    W h e n t h i s d u s t n a l l y s e t t l e s , h o w e v e r , m o d u l e s a r e l i k e l y t o b e g e n e r a l l y a c c e p t e d a s

    o n e o f t h e m o s t i m p o r t a n t a n d u s e f u l f e a t u r e s o f F o r t r a n 9 0 .

    U n l i k e m a i n p r o g r a m s a n d e x t e r n a l s u b p r o g r a m s , m o d u l e s a r e n o t t h e m s e l v e s e x e -

    c u t a b l e p r o g r a m u n i t s . R a t h e r , t h e y c o n t a i n d e n i t i o n s t h a t c a n b e c o n v e n i e n t l y a c -

    c e s s e d a n d u s e d b y e x e c u t a b l e p r o g r a m u n i t s . F o r e x a m p l e , a m o d u l e m i g h t c o n t a i n

    i n t e r f a c e b l o c k s f o r a l i b r a r y o f e x t e r n a l p r o c e d u r e s a n d b e u s e d t o m a k e t h e i n t e r f a c e s

    o f t h e s e l i b r a r y p r o c e d u r e s e x p l i c i t i n a n a p p l i c a t i o n u s i n g t h a t l i b r a r y . A l i k e l y g r o w i n g

    t r e n d i s t o r e p a c k a g e t h e e n t i r e l i b r a r y i n a m o d u l e - t h a t i s , t o p l a c e a l l o f t h e p r o c e d u r e

    d e n i t i o n s i n a m o d u l e ( a s s u m i n g t h e p r o c e d u r e s c a n b e w r i t t e n i n F o r t r a n ) - w h i c h h a s

    t h e t w i n b e n e t s t o a n a p p l i c a t i o n o f m a k i n g t h e p r o c e d u r e i n t e r f a c e s e x p l i c i t w i t h o u t

    t h e n e e d f o r i n t e r f a c e b l o c k s a n d g i v i n g t h e a p p l i c a t i o n d e v e l o p e r a p o w e r f u l t o o l f o r

    n a m e s p a c e m a n a g e m e n t .

    D a t a r e l a t e d u s e s o f m o d u l e s a r e j u s t a s i m p o r t a n t a s p r o c e d u r e r e l a t e d u s e s . U s e r -

    d e n e d t y p e d e n i t i o n s c a n b e p l a c e d i n a m o d u l e a n d t h u s m a d e a v a i l a b l e t o t h e o t h e r

    p r o g r a m u n i t s o f a n a p p l i c a t i o n , a n d i n d e e d t h i s i s t h e p r e f e r r e d w a y o f p a c k a g i n g

    m o s t t y p e d e n i t i o n s . D a t a o b j e c t s , o f a n y t y p e , k i n d , a n d s h a p e c a n b e d e c l a r e d i n a

    m o d u l e a n d t h u s b e c o m e g l o b a l d a t a o b j e c t s f o r a n a p p l i c a t i o n u s i n g t h a t m o d u l e . T h i s

  • 8/4/2019 Fortran 90 and Computational Science

    6/49

    6

    p r o v i d e s a n o n - s t o r a g e - a s s o c i a t e d g l o b a l d a t a a l t e r n a t i v e t o C O M M O N , w h i c h c a n b e

    u s e d w h e r e s t o r a g e a s s o c i a t i o n i s a p r o b l e m ( e . g . , i n d i s t r i b u t e d m e m o r y e n v i r o n m e n t s ) .

    A r r a y s i n m o d u l e s c a n b e a l l o c a t a b l e , t h u s p r o v i d i n g a m e a n s o f h a v i n g d y n a m i c a r r a y s

    c o n v e n i e n t l y a c c e s s i b l e t o a n y o f t h e p r o g r a m u n i t s o f t h e a p p l i c a t i o n .

    A m o d u l e c a n s i m u l t a n e o u s l y c o n t a i n b o t h d a t a r e l a t e d a n d p r o c e d u r e r e l a t e d e n t i t i e s .

    O n e t y p i c a l s u c h a p p l i c a t i o n o f a m o d u l e i s t o p a c k a g e a d a t a a b s t r a c t i o n - t h a t i s , t o

    c o n t a i n a t y p e d e n i t i o n , i n t e r f a c e s d e n i n g o p e r a t o r s t o b e u s e d i n c o n j u n c t i o n w i t h

    o p e r a n d s o f t h a t t y p e , a n d p o s s i b l y e v e n t h e p r o c e d u r e s d e n i n g o p e r a t i o n s o n t h a t

    t y p e . F o r e x a m p l e t h e t y p e d e n i t i o n f o r R A T I O N A L a n d t h e e x t e n s i o n o f \ + " t o

    R A T I O N A L a d d i t i o n i l l u s t r a t e d a b o v e c o u l d b e p a c k a g e d i n a m o d u l e a s f o l l o w s :

    M O D U L E R A T I O N A L _ A R I T H M E T I C

    T Y P E R A T I O N A L

    I N T E G E R : : N U M E R A T O R

    I N T E G E R : : D E N O M I N A T O R

    E N D T Y P E R A T I O N A L

    I N T E R F A C E O P E R A T O R ( + )

    F U N C T I O N R A T _ A D D ( X , Y )

    T Y P E ( R A T I O N A L ) : : R A T _ A D D

    T Y P E ( R A T I O N A L ) : : X , Y

    E N D F U N C T I O N R A T _ A D D

    E N D I N T E R F A C E

    . . . ! a n d o t h e r s t u f f f o r a c o m p l e t e r a t i o n a l a r i t h m e t i c f a c i l i t y

    E N D M O D U L E R A T I O N A L _ A R I T H M E T I C

    T h i s s o r t o f c o m p r e h e n s i v e u s e o f m o d u l e s f o r w i l l b e d e s c r i b e d i n m o r e d e t a i l i n t h e

    n e x t r e l e a s e .

    I n p u t a n d O u t p u t F o r t r a n 9 0 a d d s a f e w a d d i t i o n a l o p t i o n s t o t h e c o m p r e h e n s i v e l e

    c o n n e c t i o n c a p a b i l i t i e s o f F o r t r a n 7 7 . O n e i m p o r t a n t e x a m p l e i s t h e A C T I O N = o p e n

    s p e c i e r , w h i c h a l l o w s a l e t o b e c o n n e c t e d a s R E A D o r W R I T E o r R E A D W R I T E .

    T h e m a j o r I / O a d d i t i o n s i n F o r t r a n 9 0 , h o w e v e r , a r e N A M E L I S T a n d n o n a d v a n c i n g

    I / O . N A M E - L I S T h a s l o n g b e e n i n c l u d e d i n m a n y F o r t r a n c o m p i l e r s t h e s t a n d a r d

    h a s n a l l y c a u g h t u p t o t h i s c o m m o n p r a c t i c e a n d h a s i d e n t i e d a s t a n d a r d f o r m

    f o r N A M E L I S T f r o m a m o n g t h e v a r i o u s e x i s t i n g v e r s i o n s . I n a d d i t i o n t o s p e c i f y i n g

    a s t a n d a r d N A M E L I S T , i t s i n c l u s i o n i n F o r t r a n 9 0 w i l l i n s u r e t h a t N A M E L I S T i s

    a v a i l a b l e i n a l l F o r t r a n 9 0 c o m p i l e r s .

    T h e o t h e r m a j o r I / O a d d i t i o n i n F o r t r a n 9 0 i s n o n a d v a n c i n g I / O , w h i c h p r o v i d e s t h e

    f u n c t i o n a l i t y o f r e a d i n g o r w r i t i n g o n l y p a r t o f a r e c o r d . R e c a l l t h a t e a c h f o r m a t t e d

  • 8/4/2019 Fortran 90 and Computational Science

    7/49

    O v e r v i e w o f F o r t r a n 9 0 7

    s e q u e n t i a l R E A D o r W R I T E , t h e o n l y f o r m o f I / O t o w h i c h n o n a d v a n c i n g a p p l i e s , i n

    F o r t r a n 7 7 c a u s e s ( a t l e a s t ) o n e e n t i r e r e c o r d t o b e r e a d o r w r i t t e n t h a t i s , t h e l e i s

    a l w a y s p o s i t i o n e d b e t w e e n r e c o r d s a f t e r e x e c u t i o n o f a R E A D o r W R I T E s t a t e m e n t .

    N o n a d v a n c i n g I / O i s d i e r e n t i n t h a t t h e l e r e m a i n s p o s i t i o n e d a f t e r t h e l a s t c h a r a c t e r

    t r a n s f e r r e d ( e e c t i v e l y b e t w e e n c h a r a c t e r s i n a r e c o r d r a t h e r t h a n b e t w e e n r e c o r d s ) -

    a n o n a d v a n c i n g R E A D d o e s n o t \ s k i p " t o t h e e n d o f t h e r e c o r d a n d a n o n a d v a n c i n g

    W R I T E d o e s n o t t e r m i n a t e t h e r e c o r d ( i . e . , d o e s n o t w r i t e a n e n d - o f - r e c o r d m a r k ) . T h e

    n e x t R E A D o r W R I T E o n t h a t l e s t a r t s w h e r e t h e l a s t o n e l e f t o . N o n a d v a n c i n g I / O

    i s s p e c i e d b y i n c l u d i n g A D V A N C E = ' N O ' i n t h e c o n t r o l l i s t o f t h e R E A D o r W R I T E

    s t a t e m e n t . F o r e x a m p l e , t h e f o l l o w i n g n o n a d v a n c i n g R E A D s t a t e m e n t c o u l d b e u s e d

    t o o b t a i n t h e n e x t c h a r a c t e r f r o m t h e i n p u t t e r m i n a l :

    C H A R A C T E R : : C

    R E A D ( * , ` ( A ) ' , A D V A N C E = ' N O ' , I O S T A T = I O S ) C

    O t h e r f o r m s o f i n p u t / o u t p u t c o n s i d e r e d f o r F o r t r a n 9 0 , b u t t h e n n o t a d o p t e d , w e r e

    a s y n c h r o n o u s a n d p a r a l l e l I / O a n d a v a r i a t i o n o f k e y e d a c c e s s . N o r i s t h e r e a n y d i r e c t

    d a t a b a s e s u p p o r t i n F o r t r a n 9 0 , t h o u g h F o r t r a n b i n d i n g s e x i s t t o m o d e r n d a t a b a s e

    f a c i l i t i e s s u c h a s t h e s t r u c t u r e d q u e r y l a n g u a g e ( S Q L ) s t a n d a r d .

    O b s o l e s c e n t F e a t u r e s F o r t r a n 9 0 i n c l u d e s a r s t s t e p t o w a r d a m o d e l f o r p l a n n e d l a n g u a g e

    e v o l u t i o n a s o p p o s e d t o u n b a l a n c e d g r o w t h o r a d h o c r e m o v a l o f f e a t u r e s . A s w i t h m o s t

    r s t s t e p s , t h i s o n e i s s m a l l , t e n t a t i v e , a n d w i t h a n a s - y e t u n s u r e o u t c o m e . T h e i d e a

    i s t o u l t i m a t e l y r e m o v e t h o s e f e a t u r e s t h a t b e c o m e o b s o l e t e a s t h e l a n g u a g e e v o l v e s ,

    b u t t o o c i a l l y i d e n t i f y s u c h c a n d i d a t e s a s \ o b s o l e s c e n t " ( i n t h e p r o c e s s o f b e c o m i n g

    o b s o l e t e ) w e l l i n a d v a n c e o f a c t u a l r e m o v a l . T h i s i s i n t e n d e d t o g i v e t h e F o r t r a n

    c o m m u n i t y ( a ) a c h a n c e t o r e v i e w t h e r e c o m m e n d a t i o n s a n d p r e v e n t m i s t a k e s f r o m

    b e i n g m a d e a n d ( b ) t i m e t o p r e p a r e f o r t h e c h a n g e i n a n o r d e r l y w a y . A c c o r d i n g t o t h e

    c u r r e n t m o d e l , a f e a t u r e l i s t e d a s o b s o l e s c e n t i n o n e v e r s i o n o f t h e F o r t r a n s t a n d a r d i s

    a c a n d i d a t e f o r r e m o v a l f r o m t h e n e x t v e r s i o n .

    T h e f o l l o w i n g t e n f e a t u r e s o f F o r t r a n 9 0 a r e l i s t e d a s o b s o l e s c e n t :

    1 . t h e a r i t h m e t i c I F

    2 . r e a l ( a n d d o u b l e p r e c i s i o n ) D O i n d e x v a r i a b l e s a n d e x p r e s s i o n s

    3 . s h a r e d D O t e r m i n a t i o n ( i . e . , t w o l o o p s t e r m i n a t i n g o n t h e s a m e s t a t e m e n t )

    4 . D O l o o p t e r m i n a t i o n o n o t h e r t h a n E N D D O o r C O N T I N U E

    5 . b r a n c h i n g t o a n E N D I F s t a t e m e n t f r o m o u t s i d e t h a t I F c o n s t r u c t

    6 . a l t e r n a t e r e t u r n ( u s e a r e t u r n c o d e v a r i a b l e i n s t e a d )

    7 . t h e P A U S E s t a t e m e n t ( u s e R E A D i n s t e a d )

  • 8/4/2019 Fortran 90 and Computational Science

    8/49

    8

    T a b l e 1 :

    f u n c t i o n a l i t y F 7 7 C C

    + +

    F 9 0

    n u m e r i c a l r o b u s t n e s s 2 4 3 1

    d a t a p a r a l l e l i s m 3 3 3 1

    d a t a a b s t r a c t i o n 4 3 2 1

    o b j e c t o r i e n t e d p r o g r a m m i n g 4 3 1 2

    f u n c t i o n a l p r o g r a m m i n g 4 3 2 1

    a v e r a g e 3 . 4 3 . 2 2 . 2 1 . 2

    8 . A S S I G N a n d a s s i g n e d G O T O s t a t e m e n t s ( u s e i n t e r n a l p r o c e d u r e s i n s t e a d )

    9 . a s s i g n e d F O R M A T s p e c i e r s ( u s e c h a r a c t e r s t r i n g s i n s t e a d )

    1 0 . t h e H e d i t d e s c r i p t o r

    2 C o m p a r i s o n o f F o r t r a n 7 7 , C , C + + , a n d F o r t r a n

    9 0

    F o r t h i r t y y e a r s , f r o m i t s i n c e p t i o n t h r o u g h F o r t r a n 7 7 , F o r t r a n h a s b e e n t h e p r i n c i p a l

    l a n g u a g e o f c o m p u t a t i o n a l s c i e n c e . D u r i n g t h i s t i m e F o r t r a n ' s n u m e r i c a l c a p a b i l i t i e s h a v e

    b e e n r e m a r k a b l y s t a b l e a n d s u p e r i o r t o t h a t o f o t h e r c o m p u t e r l a n g u a g e s t h e b i g g e s t c h a n g e s

    h a v e c o m e i n t h e f o r m o f i n c r e a s i n g l y d i v e r s e a n d r e l i a b l e l i b r a r i e s o f n u m e r i c a l r o u t i n e s . T h e

    u n i o n o f F o r t r a n , t e c h n i q u e s f o r i t s u s e , a n d t h e e x t e n s i v e n u m e r i c a l l i b r a r i e s c h a r a c t e r i z e

    t h e p r e d o m i n a n t i n f r a s t r u c t u r e f o r c o m p u t a t i o n a l s c i e n c e .

    I n t h e p a s t d e c a d e , h o w e v e r , t h e i n c r e a s i n g i m p o r t a n c e o f d y n a m i c d a t a s t r u c t u r e s ( p a r -

    t i c u l a r l y d y n a m i c a r r a y s ) , u n i x w o r k s t a t i o n s , s o p h i s t i c a t e d i n t e r a c t i v e v i s u a l i z a t i o n f a c i l i t i e s ,

    a n d , m o r e r e c e n t l y , p a r a l l e l a r c h i t e c t u r e s - n o n e o f w h i c h F o r t r a n 7 7 a c c o m m o d a t e s w e l l - h a s

    s p u r r e d i n t e r e s t i n t h e u s e o f o t h e r l a n g u a g e s f o r c o m p u t a t i o n l a n g u a g e s , m o s t n o t a b l y C .

    R e c e n t l y C + + h a s a l s o g a r n e r e d c o n s i d e r a b l e i n t e r e s t , a n d F o r t r a n h a s a t t e m p t e d t o a d -

    d r e s s i t s d e c i e n c i e s f o r m o d e r n c o m p u t a t i o n a l s c i e n c e b y e v o l v i n g t o F o r t r a n 9 0 . A g e n e r a l

    a t t e m p t i s m a d e i n t h i s s e c t i o n t o c o m p a r e t h e r e l a t i v e s u i t a b i l i t y t o c o m p u t a t i o n a l s c i e n c e

    o f t h e s e f o u r l a n g u a g e s , t w o a v o r s o f C ( C a n d C + + ) a n d t w o a v o r s o f F o r t r a n ( F o r t r a n

    7 7 a n d F o r t r a n 9 0 ) . T a b l e 1 s u m m a r i z e s t h i s c o m p a r i s o n , a n d t h e f o l l o w i n g s u b s e c t i o n s

    a t t e m p t t o r a t i o n a l i z e t h e s e r a n k i n g s f r o m b e s t ( 1 ) t o w o r s t ( 4 ) . .

  • 8/4/2019 Fortran 90 and Computational Science

    9/49

    C o m p a r i s o n o f F o r t r a n 7 7 , C , C + + , a n d F o r t r a n 9 0 9

    2 . 1 N u m e r i c a l R o b u s t n e s s

    I n s e c t i o n 3 . 3 b e l o w , N u m e r i c P o l y m o r p h i s m , i s a n e x a m p l e o f s e v e r a l v e r s i o n s o f a p i c t u r e -

    s m o o t h i n g r o u t i n e t h a t a r e g i v e n o n e g e n e r i c n a m e . T h i s g e n e r i c c a p a b i l i t y i s d e s c r i b e d

    t h e r e a s o n e o f t h e f e a t u r e s t h a t p r o v i d e F o r t r a n 9 0 w i t h a d d i t i o n a l n u m e r i c r o b u s t n e s s o v e r

    F o r t r a n 7 7 ( a n d C ) . F o r t r a n 7 7 , F o r t r a n 9 0 , a n d C v e r s i o n s o f s u b r o u t i n e S M O O T H a r e

    g i v e n h e r e f o r c o m p a r i s o n p u r p o s e s . ( N o t e t h a t t h e F o r t r a n 9 0 v e r s i o n m a k e s u s e o f t h e d a t a

    p a r a l l e l i s m d e s c r i b e d i n s e c t i o n 4 . )

    N u m e r i c p o l y m o r p h i s m , p l u s r e a l k i n d t y p e p a r a m e t e r i z a t i o n , d e c i m a l p r e c i s i o n s e l e c t i o n ,

    a n d n u m e r i c e n v i r o n m e n t a l i n q u i r y , j u s t i f y r a n k i n g F o r t r a n 9 0 r s t a m o n g t h e f o u r l a n g u a g e s .

    T h e r e a s o n f o r r a n k i n g F o r t r a n 7 7 s e c o n d i s i t s s u p p o r t f o r c o m p l e x v a r i a b l e s , i m p o r t a n t

    i n m a n y c o m p u t a t i o n a l s c i e n c e a p p l i c a t i o n s . C + + n u d g e s o u t C f o r t h i r d p l a c e d u e t o i t s

    c a p a b i l i t i e s i n t h e g e n e r a l a r e a o f p o l y m o r p h i s m .

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * F o r t r a n 7 7 s u b r o u t i n e t o c o m p u t e a 3 x 3 a v e r a g e f o r e a c h *

    * e l e m e n t o f a n i n p u t m a t r i x , e x c e p t f o r t h e e d g e s o f t h e *

    * m a t r i x . T h i s i s a s i m p l e v e r s i o n o f a c o m m o n t e c h n i q u e *

    * f o r r e f i n i n g / e n h a n c i n g a p i c t u r e r e p r e s e n t e d b y a m a t r i x . *

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * 2 3 4 5 6 7

    S U B R O U T I N E s m o o t h ( o u t p u t , i n p u t , n , m )

    I N T E G E R i , j , n , m

    R E A L u p p e r , m i d , l o w e r

    R E A L o u t p u t ( n , m ) , i n p u t ( n , m )

    d o 1 0 , i = 2 , n - 1

    d o 2 0 , j = 2 , m - 1

    u p p e r = i n p u t ( i - 1 , j - 1 ) + i n p u t ( i - 1 , j ) + i n p u t ( i - 1 , j + 1 )

    m i d = i n p u t ( i , j - 1 ) + i n p u t ( i , j ) + i n p u t ( i , j + 1 )

    l o w e r = i n p u t ( i + 1 , j - 1 ) + i n p u t ( i + 1 , j ) + i n p u t ( i + 1 , j + 1 )

    o u t p u t ( i , j ) = ( u p p e r + m i d + l o w e r ) / 9 . 0

    2 0 c o n t i n u e

    1 0 c o n t i n u e

    d o 3 0 , i = 1 , n

    o u t p u t ( i , 1 ) = i n p u t ( i , 1 )

    o u t p u t ( i , m ) = i n p u t ( i , m )

    3 0 c o n t i n u e

    d o 4 0 , j = 2 , m - 1

    o u t p u t ( 1 , j ) = i n p u t ( 1 , j )

  • 8/4/2019 Fortran 90 and Computational Science

    10/49

    1 0

    o u t p u t ( n , j ) = i n p u t ( n , j )

    4 0 c o n t i n u e

    e n d

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * F o r t r a n 9 0 v e r s i o n o f s u b r o u t i n e S M O O T H . *

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * 2 3 4 5 6 7

    S U B R O U T I N E s m o o t h ( o u t p u t , i n p u t )

    R E A L i n p u t ( : , : ) , o u t p u t ( s i z e ( i n p u t , 1 ) , s i z e ( i n p u t , 2 ) )

    I N T E G E R N , M

    N = s i z e ( i n p u t , 1 )

    M = s i z e ( i n p u t , 2 )

    o u t p u t ( 2 : n - 1 , 2 : m - 1 ) = &

    ( i n p u t ( 1 : n - 2 , 1 : m - 2 ) + i n p u t ( 1 : n - 2 , 2 : m - 1 ) + i n p u t ( 1 : n - 2 , 3 : m ) &

    + i n p u t ( 2 : n - 1 , 1 : m - 2 ) + i n p u t ( 2 : n - 1 , 2 : m - 1 ) + i n p u t ( 2 : n - 1 , 3 : m ) &

    + i n p u t ( 3 : n , 1 : m - 2 ) + i n p u t ( 3 : n , 2 : m - 1 ) + i n p u t ( 3 : n , 3 : m ) / 9 .

    o u t p u t ( ( / 1 , n / , : ) = i n p u t ( ( / 1 , n / ) , : )

    o u t p u t ( 2 : n - 1 , ( / 1 , m / ) = i n p u t ( 2 : n - 1 , ( / 1 , m / ) )

    e n d

    / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * C v e r s i o n o f s u b r o u t i n e S M O O T H . *

    * C + + v e r s i o n w o u l d b e s i m i l a r , t h o u g h c l a s s e s w o u l d b e u s e d *

    * i f p o l y m o r p h i s m w e r e i m p o r t a n t a s d e s c r i b e d i n s e c t i o n 3 . 3 . *

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /

    v o i d s m o o t h ( v o i d )

    {

    i n t i , j

    f l o a t u p p e r , m i d , l o w e r

    f o r ( i = 1 i < ( I M A X - 1 ) i + + ) {

    f o r ( j = 1 j < ( J M A X - 1 ) j + + ) {

    u p p e r = i n p u t i - 1 ] j - 1 ] + i n p u t i - 1 ] j ] + i n p u t i -

    1 ] j + 1 ]

    m i d = i n p u t i ] j - 1 ] + i n p u t i ] j ] + i n p u t i

    ] j + 1 ]

  • 8/4/2019 Fortran 90 and Computational Science

    11/49

    C o m p a r i s o n o f F o r t r a n 7 7 , C , C + + , a n d F o r t r a n 9 0 1 1

    l o w e r = i n p u t i + 1 ] j - 1 ] + i n p u t i + 1 ] j ] +

    i n p u t i + 1 ] j + 1 ]

    o u t p u t i ] j ] = ( u p p e r + m i d + l o w e r ) / 9 . 0

    }

    }

    f o r ( i = 0 i < I M A X i + + ) {

    o u t p u t i ] 0 ] = i n p u t i ] 0 ]

    o u t p u t i ] J M A X - 1 ] = i n p u t i ] J M A X - 1 ]

    }

    f o r ( j = 0 j < J M A X j + + ) {

    o u t p u t 0 ] j ] = i n p u t 0 ] j ]

    o u t p u t I M A X - 1 ] j ] = i n p u t I M A X - 1 ] j ]

    }

    }

    v o i d w r t _ i n p u t ( v o i d )

    {

    i n t i , j

    ( v o i d ) p r i n t f ( " T h e v a l u e s o f t h e i n p u t m a t r i x : \ n " )

    ( v o i d ) p r i n t f ( " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n " )

    f o r ( i = 0 i < I M A X i + + ) {

    f o r ( j = 0 j < ( J M A X - 1 ) j + + ) {

    ( v o i d ) p r i n t f ( " % f " , i n p u t i ] j ] )

    }

    ( v o i d ) p r i n t f ( " % f \ n " , i n p u t i ] J M A X - 1 ] )

    }

    ( v o i d ) p r i n t f ( " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n " )

    }

    v o i d w r t _ o u t p u t ( v o i d )

    {

    i n t i , j

    ( v o i d ) p r i n t f ( " T h e v a l u e s o f t h e i n p u t m a t r i x a f t e r

    s m o o t h i n g : \ n " )

    ( v o i d ) p r i n t f ( " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n " )

  • 8/4/2019 Fortran 90 and Computational Science

    12/49

    1 2

    f o r ( i = 0 i < I M A X i + + ) {

    f o r ( j = 0 j < ( J M A X - 1 ) j + + ) {

    ( v o i d ) p r i n t f ( " % f " , o u t p u t i ] j ] )

    }

    ( v o i d ) p r i n t f ( " % f \ n " , o u t p u t i ] J M A X - 1 ] ) }

    ( v o i d ) p r i n t f ( " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n " )

    }

    2 . 2 D a t a P a r a l l e l i s m S e c t i o n

    S e c t i o n 4 . 5 b e l o w c o n t a i n s t w o v e r s i o n s o f t h e G a u s s i a n e l i m i n a t i o n a l g o r i t h m f o r s o l v i n g

    s y s t e m s o f l i n e a r e q u a t i o n s , w i t h a n d w i t h o u t u s i n g t h e m a x i m u m p i v o t s t r a t e g y . T h a t

    e x a m p l e w a s i n c l u d e d t o i l l u s t r a t e t h e d a t a p a r a l l e l f e a t u r e s o f F o r t r a n 9 0 - i t i s a r e l a t i v e l y

    s i m p l e , p r a c t i c a l p r o b l e m t h a t m a k e s u s e o f m a n y o f t h e F o r t r a n 9 0 d a t a p a r a l l e l c a p a b i l i t i e s .

    F o r c o m p a r i s o n w i t h t h e p r o g r a m s i n s e c t i o n 4 . 5 , F o r t r a n 7 7 a n d C v e r s i o n s a r e s u p p l i e d

    h e r e .

    O f t h e f o u r l a n g u a g e s , o n l y F o r t r a n 9 0 h a s d a t a p a r a l l e l c a p a b i l i t i e s m e a n i n g f u l f o r c o m -

    p u t a t i o n a l s c i e n c e t h e n a t u r e o f t h e o t h e r t h r e e l a n g u a g e s i n t h i s r e g a r d a r e e s s e n t i a l t h e

    s a m e , n a m e l y m i s s i n g a l t o g e t h e r . T h i s e x p l a i n s t h e r e a s o n f o r t h e r a n k i n g s o f t h e f o u r

    l a n g u a g e s a l o n g t h i s d i m e n s i o n .

    H e r e a r e t h e s e t o f F o r t r a n 7 7 a n d C r o u t i n e s t h a t p e r f o r m t h e G a u s s i a n e l i m i n a t i o n

    c o m p u t a t i o n :

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * P r o g r a m t o d e t e r m i n e t h e c o r r e c t p r o c e s s i n g o f t h e *

    * s u b r o u t i n e s : p i v o t . f , t r i a n g . f , a n d b a c k . f . T h e *

    * s u b r o u t i n e s d e t e r m i n e t h e s o l u t i o n t o a s e r i e s o f *

    * s i m u l t a n e o u s e q u a t i o n s . *

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * 2 3 4 5 6 7

    P R O G R A M t e s t g

    I N T E G E R I M A X , J M A X

    P A R A M E T E R ( I M A X = 3 , J M A X = 4 )

    R E A L m a t r i x ( I M A X , J M A X )

    R E A L s o l v e c ( I M A X )

    I N T E G E R i , j , n

    D A T A ( ( m a t r i x ( i , j ) , j = 1 , J M A X ) , i = 1 , I M A X )

    + / - 1 . 0 , 1 . 0 , 2 . 0 , 2 . 0 , 3 . 0 , - 1 . 0 , 1 . 0 , 6 . 0 ,

    + - 1 . 0 , 3 . 0 , 4 . 0 , 4 . 0 /

  • 8/4/2019 Fortran 90 and Computational Science

    13/49

    C o m p a r i s o n o f F o r t r a n 7 7 , C , C + + , a n d F o r t r a n 9 0 1 3

    n = I M A X

    w r i t e ( * , * ) \ " T h e o r i g i n a l m a t r i x , \ " , n , \ " b y \ " , n + 1 , \ " : \ "

    c a l l w r t m a t ( m a t r i x , n , n + 1 )

    c a l l p i v o t ( m a t r i x , n )

    w r i t e ( * , * ) \ " T h e m a t r i x a f t e r p i v o t i n g : \ "

    c a l l w r t m a t ( m a t r i x , n , n + 1 )

    c a l l t r i a n g ( m a t r i x , n )

    w r i t e ( * , * ) \ " T h e m a t r i x a f t e r l o w e r t r i a n g u l a t i o n : \ "

    c a l l w r t m a t ( m a t r i x , n , n + 1 )

    c a l l b a c k ( s o l v e c , m a t r i x , n )

    w r i t e ( * , * ) \ " T h e s o l u t i o n v e c t o r a f t e r b a c k s u b s t i t u t i o n : \ "

    w r i t e ( * , * ) \ " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ "

    w r i t e ( * , * ) ( s o l v e c ( i ) , i = 1 , n )

    w r i t e ( * , * ) \ " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ "

    e n d

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * S u b r o u t i n e t o d e t e r m i n e t h e l a r g e s t v a l u e i n t h e *

    * f i r s t c o l u m n o f a n a u g m e n t e d m a t r i x a n d m o v e t h e *

    * r o w w i t h t h e l a r g e s t v a l u e i n t h e f i r s t c o l u m n t o *

    * f i r s t r o w . T h e p r o c e s s i s t h e n r e p e a t e d f o r t h e *

    * s u c c e s s i v e r o w s a n d c o l u m n s , a n d f o r e a c h *

    * i t e r a t i o n , t h e c o l u m n p o s i t i o n a n d t h e r o w p o s i t i o n *

    * a r e d e c r e m e n t e d b y 1 ( T h a t i s , 1 s t C o l u m n - 1 s t R o w *

    * t h e n 2 n d C o l u m n - 2 n d R o w , t h e n 3 r d C o l u m n - 3 r d R o w , *

    * e t c . *

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * 2 3 4 5 6 7

    S U B R O U T I N E p i v o t ( m a t r i x , n )

    I N T E G E R i , j , k , n

    R E A L m a t r i x ( n , n + 1 ) , m a x v a l , t e m p v a l

    d o 1 0 , j = 1 , n

    m a x v a l = m a t r i x ( j , j )

    d o 2 0 , i = j + 1 , n

    i f ( m a x v a l . l t . m a t r i x ( i , j ) ) t h e n

    m a x v a l = m a t r i x ( i , j )

    d o 3 0 , k = 1 , n + 1

    t e m p v a l = m a t r i x ( i , k )

  • 8/4/2019 Fortran 90 and Computational Science

    14/49

    1 4

    m a t r i x ( i , k ) = m a t r i x ( j , k )

    m a t r i x ( j , k ) = t e m p v a l

    3 0 c o n t i n u e

    e n d i f

    2 0 c o n t i n u e

    1 0 c o n t i n u e

    e n d

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * S u b r o u t i n e t h a t p e r f o r m s t h e l o w e r d e c o m p o s i t i o n o f a n *

    * i n p u t m a t r i x . *

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * 2 3 4 5 6 7

    S U B R O U T I N E t r i a n g ( m a t r i x , n )

    I N T E G E R i , j , k , n

    R E A L m a t r i x ( n , n + 1 ) , p i v o t , p c e l e m

    d o 1 0 , j = 1 , n

    p i v o t = m a t r i x ( j , j )

    d o 2 0 , k = j + 1 , n + 1

    m a t r i x ( j , k ) = m a t r i x ( j , k ) / p i v o t

    2 0 c o n t i n u e

    d o 3 0 , i = j + 1 , n

    p c e l e m = m a t r i x ( i , j )

    d o 4 0 , k = j + 1 , n + 1

    m a t r i x ( i , k ) = m a t r i x ( i , k ) - p c e l e m * m a t r i x ( j , k )

    4 0 c o n t i n u e

    3 0 c o n t i n u e

    1 0 c o n t i n u e

    e n d

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * S u b r o u t i n e t o c o m p u t e a s o l u t i o n v e c t o r f r o m a n *

    * a u g m e n t e d m a t r i x t h a t h a s a l r e a d y u n d e r g o n e l o w e r *

    * d e c o m p o s i t i o n . *

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * 2 3 4 5 6 7

  • 8/4/2019 Fortran 90 and Computational Science

    15/49

    C o m p a r i s o n o f F o r t r a n 7 7 , C , C + + , a n d F o r t r a n 9 0 1 5

    S U B R O U T I N E b a c k ( s o l v e c , m a t r i x , n )

    I N T E G E R n

    R E A L s o l v e c ( n ) , m a t r i x ( n , n + 1 ) , s u m

    s o l v e c ( n ) = m a t r i x ( n , n + 1 )

    d o 1 0 , i = n - 1 , 1 , - 1

    s u m = 0 . 0

    d o 2 0 , j = i + 1 , n

    s u m = s u m + m a t r i x ( i , j ) * s o l v e c ( j )

    2 0 c o n t i n u e

    s o l v e c ( i ) = m a t r i x ( i , n + 1 ) - s u m

    1 0 c o n t i n u e

    e n d

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * P r o g r a m t o t e s t t h e s u b r o u t i n e b i s e c . f , w h i c h *

    * d e t e r m i n e s t h e r o o t o f a n e q u a t i o n ( d e c l a r e d i n f . f ) . *

    * H o w e v e r , t h e f u n c t i o n d o e s a s s u m e t h a t t h e f u n c t i o n - f *

    * i s b r a c k e t e d b y t h e t w o v a l u e s . T h a t i s , t h e r e i s n o t *

    * m o r e t h a n o n e r o o t b e t w e e n t h e t w o e n d p o i n t s s u p p l i e d b y *

    * t h e u s e r . *

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * 2 3 4 5 6 7

    P R O G R A M t e s t b s

    R E A L x l e f t , x r i g h t

    R E A L f

    E X T E R N A L f

    w r i t e ( * , * ) \ " P l e a s e e n t e r a n i n i t i a l l e f t a n d r i g h t v a l u e : \ "

    r e a d ( * , * ) x l e f t , x r i g h t

    c a l l b i s e c ( f , x l e f t , x r i g h t )

    e n d

    A n d h e r e a r e t h e C r o u t i n e s f o r t h e s a m e a l g o r i t h m :

  • 8/4/2019 Fortran 90 and Computational Science

    16/49

    1 6

    / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * P r o g r a m t o d e t e r m i n e t h e c o r r e c t p r o c e s s i n g o f t h e t h r e e *

    * f u n c t i o n s p i v o t . c , t r i a n g . c , a n d b a c k . c . T h e f u n c t i o n s *

    * d e t e r m i n e t h e s o l u t i o n t o a s e r i e s o f s i m u l t a n e o u s e q u a t i o n s . *

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /

    # i n c l u d e < s t d i o . h >

    # d e f i n e I M A X 3

    # d e f i n e J M A X 4

    f l o a t m a t r i x I M A X ] J M A X ] = {

    { - 1 . 0 , 1 . 0 , 2 . 0 , 2 . 0 } ,

    { 3 . 0 , - 1 . 0 , 1 . 0 , 6 . 0 } ,

    { - 1 . 0 , 3 . 0 , 4 . 0 , 4 . 0 }

    }

    f l o a t s o l v e c I M A X ] = { 0 . 0 , 0 . 0 , 0 . 0 }

    m a i n ( )

    {

    v o i d w r t _ o u t p u t ( v o i d )

    v o i d p i v o t ( v o i d )

    v o i d t r i a n g ( v o i d )

    v o i d b a c k ( v o i d )

    v o i d w r t _ v e c t o r ( v o i d )

    ( v o i d ) p r i n t f ( " T h e o r i g i n a l m a t r i x % d b y % d : \ n " , I M A X , J M A X )

    ( v o i d ) w r t _ o u t p u t ( )

    ( v o i d ) p i v o t ( )

    ( v o i d ) p r i n t f ( " T h e m a t r i x a f t e r p i v o t i n g : \ n " )

    ( v o i d ) w r t _ o u t p u t ( )

    ( v o i d ) t r i a n g ( )

    ( v o i d ) p r i n t f ( " T h e m a t r i x a f t e r l o w e r d e c o m p o s i t i o n : \ n " )

    ( v o i d ) w r t _ o u t p u t ( )

    ( v o i d ) b a c k ( )

    ( v o i d ) p r i n t f ( " T h e s o l u t i o n v e c t o r a f t e r b a c k

    s u b s t i t u t i o n : \ n " )

    ( v o i d ) w r t _ v e c t o r ( )

    }

    / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * F u n c t i o n t o d e t e r m i n e t h e l a r g e s t v a l u e i n t h e f i r s t c o l u m n *

    * o f a n a u g m e n t e d m a t r i x a n d m o v e t h e r o w w i t h t h e l a r g e s t *

  • 8/4/2019 Fortran 90 and Computational Science

    17/49

    C o m p a r i s o n o f F o r t r a n 7 7 , C , C + + , a n d F o r t r a n 9 0 1 7

    * v a l u e i n t h e f i r s t c o l u m n t o t h e f i r s t r o w . T h e p r o c e s s i s *

    * t h e n r e p e a t e d f o r t h e s u c c e s s i v e r o w s a n d c o l u m n s , a n d f o r *

    * e a c h i t e r a t i o n , t h e c o l u m n p o s i t i o n a n d t h e r o w p o s i t i o n t h a t *

    * a r e t e s t e d a r e i n c r e m e n t e d b y 1 ( T h a t i s , 1 s t C o l u m n - 1 s t R o w , *

    * 2 n d C o l u m n - 2 n d R o w , 3 r d C o l u m n - 3 r d R o w , e t c . *

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /

    v o i d p i v o t ( )

    {

    i n t i , j , k

    f l o a t m a x v a l , t e m p v a l

    f o r ( j = 0 j < I M A X j + + ) {

    m a x v a l = m a t r i x j ] j ]

    f o r ( i = ( j + 1 ) i < I M A X i + + ) {

    i f ( m a x v a l < m a t r i x i ] j ] ) {

    m a x v a l = m a t r i x i ] j ]

    f o r ( k = 0 k < = I M A X k + + ) {

    t e m p v a l = m a t r i x i ] k ]

    m a t r i x i ] k ] = m a t r i x j ] k ]

    m a t r i x j ] k ] = t e m p v a l

    }

    }

    }

    }

    }

    / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * F u n c t i o n t h a t p e r f o r m s t h e l o w e r d e c o m p o s i t i o n o f a n i n p u t *

    * m a t r i x . *

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /

    v o i d t r i a n g ( v o i d )

    {

    i n t i , j , k

    f l o a t p i v o t , p c e l e m

    f o r ( j = 0 j < I M A X j + + ) {

    p i v o t = m a t r i x j ] j ]

    f o r ( k = ( j + 1 ) k < = I M A X k + + ) {

    m a t r i x j ] k ] = m a t r i x j ] k ] / p i v o t

  • 8/4/2019 Fortran 90 and Computational Science

    18/49

    1 8

    }

    f o r ( i = ( j + 1 ) i < I M A X i + + ) {

    p c e l e m = m a t r i x i ] j ]

    f o r ( k = ( j + 1 ) k < = I M A X k + + ) {

    m a t r i x i ] k ] = m a t r i x i ] k ] - ( p c e l e m * m a t r i x j ] k ] )

    }

    }

    }

    }

    / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * F u n c t i o n t o c o m p u t e a s o l u t i o n v e c t o r f r o m a n a u g m e n t e d *

    * m a t r i x t h a t h a s a l r e a d y u n d e r g o n e l o w e r d e c o m p o s i t i o n . *

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /

    v o i d b a c k ( v o i d )

    {

    i n t i , j

    f l o a t s u m

    s o l v e c I M A X - 1 ] = m a t r i x I M A X - 1 ] J M A X - 1 ]

    f o r ( i = ( I M A X - 1 ) i > - 1 i - - ) {

    s u m = 0 . 0

    f o r ( j = ( i + 1 ) j < I M A X j + + ) {

    s u m = s u m + m a t r i x i ] j ] * s o l v e c j ]

    }

    s o l v e c i ] = m a t r i x i ] I M A X ] - s u m

    }

    }

    v o i d w r t _ o u t p u t ( v o i d )

    {

    i n t i , j

    ( v o i d ) p r i n t f ( " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n " )

    f o r ( i = 0 i < I M A X i + + ) {

    f o r ( j = 0 j < ( J M A X - 1 ) j + + ) {

    ( v o i d ) p r i n t f ( " % f " , m a t r i x i ] j ] )

    }

    ( v o i d ) p r i n t f ( " % f \ n " , m a t r i x i ] J M A X - 1 ] )

  • 8/4/2019 Fortran 90 and Computational Science

    19/49

    C o m p a r i s o n o f F o r t r a n 7 7 , C , C + + , a n d F o r t r a n 9 0 1 9

    }

    ( v o i d ) p r i n t f ( " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n " )

    }

    v o i d w r t _ v e c t o r ( v o i d )

    {

    ( v o i d ) p r i n t f ( " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n " )

    ( v o i d ) p r i n t f ( " % f " , s o l v e c 0 ] )

    ( v o i d ) p r i n t f ( " % f " , s o l v e c 1 ] )

    ( v o i d ) p r i n t f ( " % f \ n " , s o l v e c 2 ] )

    ( v o i d ) p r i n t f ( " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n " )

    }

    / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    * P r o g r a m t o t e s t t h e f u n c t i o n b i s e c . c , w h i c h d e t e r m i n e s t h e *

    * r o o t o f a n e q u a t i o n ( d e c l a r e d i n f ) . . H o w e v e r , t h e f u n c t i o n d o e s *

    * a s s u m e t h a t t h e f u n c t i o n - f i s b r a c k e t e d b y t h e t w o v a l u e s . T h a t *

    * i s , t h e r e i s n o t m o r e t h a n o n e r o o t b e t w e e n t h e t w o e n d p o i n t s *

    * s u p p l i e d b y t h e u s e r . *

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /

    # i n c l u d e < s t d i o . h >

    # i n c l u d e < m a t h . h >

    m a i n ( )

    {

    v o i d b i s e c ( f l o a t i n i t _ l e f t _ v a l , f l o a t i n i t _ r i g h t _ v a l )

    f l o a t f ( f l o a t v a l u e )

    f l o a t x l e f t , x r i g h t

    c h a r l i n e 1 0 0 ]

    ( v o i d ) p r i n t f ( " P l e a s e e n t e r a n i n i t i a l l e f t a n d r i g h t

    v a l u e : " )

    ( v o i d ) f g e t s ( l i n e , s i z e o f ( l i n e ) , s t d i n )

    ( v o i d ) s s c a n f ( l i n e , " % f % f " , & x l e f t , & x r i g h t )

    ( v o i d ) b i s e c ( x l e f t , x r i g h t )

    r e t u r n ( 0 )

    }

  • 8/4/2019 Fortran 90 and Computational Science

    20/49

  • 8/4/2019 Fortran 90 and Computational Science

    21/49

    N u m e r i c a l R o b u s t n e s s 2 1

    p r o v i d e s o m e o t h e r f o r m o f r o b u s t n e s s o f t h e n u m e r i c a l c o m p u t a t i o n . T h e r s t o f t h e s e -

    b e t t e r s e l e c t i o n o f n u m e r i c p r e c i s i o n - i s p r o v i d e d b y t h e F o r t r a n 9 0 \ t y p e k i n d " m e c h a n i s m

    a n d t h e a b i l i t y t o m a k e u s e r a n d i m p l e m e n t a t i o n d e n e d f u n c t i o n s g e n e r i c o v e r d i e r e n t

    k i n d s o f a r g u m e n t s . T h e s e c o n d - i n f o r m a t i o n a b o u t t h e n u m e r i c e n v i r o n m e n t - i s p r o v i d e d

    b y t h e n u m e r i c a p p r o x i m a t i o n m o d e l a n d t h e c o r r e s p o n d i n g i n q u i r y i n t r i n s i c f u n c t i o n s t h a t

    r e t u r n e n v i r o n m e n t a l i n f o r m a t i o n r e l a t e d t o t h i s m o d e l . T h e n e x t t h r e e s u b s e c t i o n s d e s c r i b e

    t h e r s t o f t h e s e t w o e n h a n c e m e n t s t o n u m e r i c a l r o b u s t n e s s a n d t h e l a s t t w o s u b s e c t i o n s

    d e s c r i b e t h e s e c o n d o n e .

    3 . 1 N u m e r i c K i n d P a r a m e t e r i z a t i o n

    T h e F o r t r a n 9 0 K I N D m e c h a n i s m i s a s t a n d a r d i z a t i o n , r e g u l a r i z a t i o n , a n d g e n e r a l i z a t i o n o f

    t h e c o m m o n \ * s i z e " e x t e n s i o n t o F o r t r a n 7 7 . F o r e x a m p l e , t h o u g h t h e y a r e n o t s t a n d a r d ,

    i t i s c o m m o n f o r R E A L * 4 t o b e t h e s a m e a s s i n g l e p r e c i s i o n R E A L a n d R E A L * 8 t o b e

    e q u i v a l e n t t o D O U B L E P R E C I S I O N t h e \ * s i z e " s y n t a x i s a f o r m o f p a r a m e t e r i z a t i o n o f

    t h e d i e r e n t k i n d s o f r e a l d a t a t y p e s . F o r t r a n 9 0 f o r m a l i z e s t h i s c o n c e p t o f a t y p e k i n d a n d

    a s s o c i a t e s a n i n t e g e r k i n d v a l u e w i t h e a c h i n t r i n s i c d a t a t y p e . T h e s e k i n d v a l u e s a r e l e f t

    i m p l e m e n t a t i o n d e p e n d e n t ( m o r e a b o u t t h a t i n a m i n u t e ) , b u t i f a n i m p l e m e n t a t i o n c h o o s e s

    t h e v a l u e 4 f o r s i n g l e p r e c i s i o n R E A L a n d 8 f o r D O U B L E P R E C I S I O N , t h e n a l t e r n a t i v e w a y s

    o f s p e c i f y i n g R E A L a r e R E A L ( 4 ) a n d R E A L ( K I N D = 4 ) , a n d a l t e r n a t i v e w a y s o f s p e c i f y i n g

    D O U B L E P R E C I S I O N a r e R E A L ( 8 ) a n d R E A L ( K I N D = 8 ) . T h e c o m p l e t e f o r m a l s y n t a x

    f o r t h e R E A L t y p e s p e c i e r i n d e c l a r a t i o n s t a t e m e n t s i s t h e r e f o r e :

    R E A L ( K I N D = ] k i n d - v a l u e ) ]

    T h o u g h s o m e i m p l e m e n t a t i o n s m a y c h o o s e k i n d v a l u e s 4 f o r s i n g l e p r e c i s i o n r e a l a n d

    8 f o r d o u b l e p r e c i s i o n r e a l , s o t h a t t h e s e n u m b e r s a r e s i m i l a r t o t h e c o m m o n \ * 4 " a n d

    \ * 8 " e x t e n s i o n s , o r t o r e p r e s e n t t h e n u m b e r o f b y t e s i n a n o b j e c t o f t h i s k i n d ( t h e o r i g i n a l

    m o t i v a t i o n f o r t h e 4 a n d 8 ) , t h i s i s n o t a p p r o p r i a t e f o r a l l a r c h i t e c t u r e s . S o m e m a c h i n e s , f o r

    e x a m p l e ( e . g . , t h e C r a y v e c t o r s u p e r c o m p u t e r s ) , u s e a d i e r e n t ( f r o m 4 ) n u m b e r o f b y t e s

    f o r s i n g l e p r e c i s i o n r e a l o b j e c t s . P o s s i b l y m o r e i m p o r t a n t , a n i m p l e m e n t a t i o n m i g h t s u p p o r t

    m o r e t h a n o n e f o r m o f s i n g l e p r e c i s i o n , o n e t h e d e f a u l t R E A L a n d t h e o t h e r ( s ) u s i n g t h e s a m e

    a m o u n t o f s t o r a g e b u t a d i e r e n t r e p r e s e n t a t i o n m e t h o d . F o r e x a m p l e , o n a m a c h i n e w h o s e

    n a t i v e a r i t h m e t i c i s n o t I E E E , a F o r t r a n i m p l e m e n t a t i o n m i g h t s u p p o r t a s e c o n d f o r m o f

    ( s i n g l e p r e c i s i o n ) r e a l b a s e d u p o n I E E E a r i t h m e t i c . I n F o r t r a n 9 0 t e r m s , t h i s w o u l d m e r e l y

    b e a n o t h e r k i n d o f r e a l , w i t h a d i e r e n t t y p e k i n d v a l u e . T h e r e i s t h e r e f o r e n o \ o b v i o u s " s e t

    o f k i n d v a l u e s o p t i m a l f o r e v e r y i m p l e m e n t a t i o n , w h i c h i s t h e r e a s o n t h e k i n d v a l u e s a r e l e f t

    i m p l e m e n t a t i o n d e p e n d e n t .

    F o r t u n a t e l y t h e r e i s a w a y t o b o t h i s o l a t e i m p l e m e n t a t i o n k i n d v a l u e d e p e n d e n c i e s f r o m

    a p p l i c a t i o n c o d e a n d m a k e t h e c o d e m o r e r e a d a b l e a t t h e s a m e t i m e . T h a t t e c h n i q u e i s t o

    u s e t h e K I N D i n t r i n s i c f u n c t i o n t o e s t a b l i s h t h e c o r r e c t v a l u e s f o r ( a p p r o p r i a t e l y n a m e d )

    i n t e g e r c o n s t a n t s . ( T h e K I N D i n t r i n s i c r e t u r n s t h e i n t e g e r k i n d v a l u e f o r t h e t y p e o f i t s

    a r g u m e n t f o r t h a t i m p l e m e n t a t i o n . ) F o r e x a m p l e , s u p p o s e t h a t S I N G L E a n d D O U B L E a r e

  • 8/4/2019 Fortran 90 and Computational Science

    22/49

    2 2

    t h e n a m e s o f i n t e g e r c o n s t a n t s t h a t h a v e ( s o m e h o w a c q u i r e d ) t h e p r o p e r k i n d v a l u e f o r s i n g l e

    a n d d o u b l e p r e c i s i o n r e a l , r e s p e c t i v e l y . T h e n

    R E A L ( S I N G L E ) . . . s i n g l e p r e c i s i o n v a r i a b l e s . . .

    R E A L ( D O U B L E ) . . . d o u b l e p r e c i s i o n v a r i a b l e s . . .

    m a y b e u s e d t o d e c l a r e s i n g l e a n d d o u b l e p r e c i s i o n r e a l v a r i a b l e s , a s i n d i c a t e d . A l t e r n a t i v e l y ,

    t h e \ f u l l b l o w n " s y n t a x f o r s u c h d e c l a r a t i o n s i s :

    R E A L ( K I N D = S I N G L E ) . . . s i n g l e p r e c i s i o n v a r i a b l e s . . .

    R E A L ( K I N D = D O U B L E ) . . . d o u b l e p r e c i s i o n v a r i a b l e s . . .

    P r i o r t o t h e i r u s e i n t h i s w a y , S I N G L E a n d D O U B L E h a v e t o b e g i v e n t h e p r o p e r v a l u e s ,

    w h i c h m a y b e a c c o m p l i s h e d w i t h t h e f o l l o w i n g d e c l a r a t i o n :

    I N T E G E R , P A R A M E T E R : : S I N G L E = K I N D ( 1 . 0 ) , &

    D O U B L E = K I N D ( 1 D 0 )

    ( T h i s u s e s t h e \ e n t i t y o r i e n t e d " d e c l a r a t i o n s t y l e o f F o r t r a n 9 0 w h i c h , i n t h i s c a s e , c o n d e n s e s

    a n I N T E G E R s t a t e m e n t a n d a P A R A M E T E R s t a t e m e n t i n t o o n e c o m b i n e d s t a t e m e n t . ) T h e

    r s t u s e o f t h e K I N D i n t r i n s i c f u n c t i o n i n t h e p r e c e d i n g e x a m p l e h a s a s i n g l e p r e c i s i o n r e a l

    a r g u m e n t ( 1 . 0 ) , s o t h a t t h e v a l u e i t r e t u r n s i s t h e i n t e g e r k i n d v a l u e f o r s i n g l e p r e c i s i o n r e a l .

    T h e s e c o n d i n s t a n c e o f t h e K I N D i n t r i n s i c h a s a d o u b l e p r e c i s i o n r e a l a r g u m e n t ( 1 D 0 ) , s o

    i t r e t u r n s t h e i n t e g e r k i n d v a l u e f o r d o u b l e p r e c i s i o n r e a l . P r o g r a m s t h a t u s e t h i s t e c h n i q u e

    a r e p o r t a b l e , r e g a r d l e s s o f t h e k i n d v a l u e s c h o s e n b y t h e i m p l e m e n t a t i o n

    T y p e C O M P L E X u s e s t h e s a m e K I N D v a l u e s a s d o e s t y p e R E A L - t h e c o m p l e x k i n d i s

    r e a l l y t h e k i n d o f t h e r e a l / i m a g i n a r y p a r t s - a n d t h e r e i s a c o m p l e x k i n d f o r e a c h r e a l k i n d

    s u p p o r t e d b y t h e i m p l e m e n t a t i o n . T h u s

    C O M P L E X ( S I N G L E ) . . . s i n g l e p r e c i s i o n c o m p l e x v a r i a b l e s . . .

    C O M P L E X ( D O U B L E ) . . . d o u b l e p r e c i s i o n c o m p l e x v a r i a b l e s . . .

    i s t h e b e s t m a n n e r i n w h i c h t o d e c l a r e c o m p l e x o b j e c t s .

    F u r t h e r , i f t h e i m p l e m e n t a t i o n ' s n a t i v e a r i t h m e t i c i s n o t I E E E , b u t i t s u p p o r t s a n I E E E

    d a t a t y p e , t h e i n t e g e r c o n s t a n t I E E E c o u l d b e a s s i g n e d t h e k i n d v a l u e s p e c i e d b y t h e

    i m p l e m e n t a t i o n f o r I E E E a r i t h m e t i c . T h e n I E E E v a r i a b l e s c o u l d b e d e c l a r e d w i t h :

    R E A L ( I E E E ) . . . r e a l v a r i a b l e s o f t y p e I E E E . . .

    C O M P L E X ( I E E E ) . . . c o m p l e x v a r i a b l e s o f t y p e I E E E . . .

    3 . 2 P r e c i s i o n S e l e c t i o n

    T h i s p a v e s t h e w a y f o r d i s c u s s i o n o f t h a t n u m e r i c a l l y u s e f u l f e a t u r e o f F o r t r a n 9 0 , t h e S E -

    L E C T E D R E A L K I N D i n t r i n s i c f u n c t i o n , w h i c h a l l o w s t h e p r o g r a m m e r t o s p e c i f y m i n i m u m

    d e c i m a l p r e c i s i o n a n d / o r e x p o n e n t r a n g e p r o p e r t i e s . T h e S E L E C T E D R E A L K I N D f u n c -

    t i o n h a s t w o o p t i o n a l i n t e g e r a r g u m e n t s , a t l e a s t o n e o f w h i c h m u s t b e s u p p l i e d , o n e f o r

  • 8/4/2019 Fortran 90 and Computational Science

    23/49

    N u m e r i c a l R o b u s t n e s s 2 3

    t h e d e s i r e d d e c i m a l p r e c i s i o n a n d t h e o t h e r f o r t h e d e s i r e d ( d e c i m a l ) e x p o n e n t r a n g e S E -

    L E C T E D R E A L K I N D t h e n r e t u r n s t h e k i n d v a l u e f o r t h e \ s m a l l e s t " k i n d o f r e a l d a t a t y p e

    t h e i m p l e m e n t a t i o n s u p p o r t s t h a t m e e t s o r e x c e e d s t h e s e s p e c i e d c o n d i t i o n s . A n e r r o r

    c o n d i t i o n e x i s t s i f t h e r e i s n o s u c h d a t a t y p e . T h u s , f o r e x a m p l e ,

    I N T E G E R , P A R A M E T E R : : P 9 = S E L E C T E D _ R E A L _ K I N D ( 9 )

    d e c l a r e s t h e i n t e g e r c o n s t a n t P 9 t o h a v e t h e r e a l k i n d v a l u e a p p r o p r i a t e t o r e a l o b j e c t s w i t h

    a t l e a s t 9 d e c i m a l d i g i t s o f p r e c i s i o n . V a r i a b l e s m e e t i n g t h i s r e q u i r e m e n t m a y b e d e c l a r e d

    w i t h t h e s t a t e m e n t

    R E A L ( P 9 ) . . . 9 d i g i t ( a t l e a s t ) p r e c i s i o n r e a l v a r i a b l e . . .

    O n a S u n w o r k s t a t i o n t h e v a l u e o f P 9 w o u l d b e t h e s a m e a s D O U B L E ( a s d e n e d

    a b o v e ) o n a C r a y s u p e r c o m p u t e r t h e v a l u e o f P 9 w o u l d b e t h e s a m e a s S I N G L E . T h a t i s ,

    R E A L ( P 9 ) d e c l a r e s d o u b l e p r e c i s i o n v a r i a b l e s o n t h e S u n a n d s i n g l e p r e c i s i o n v a r i a b l e s o n

    t h e C r a y . W i t h t h i s t e c h n i q u e e n t i r e p r o g r a m s m a y b e p o r t a b l y w r i t t e n b a s e d u p o n d e s i r e d

    p r e c i s i o n / r a n g e p r o p e r t i e s o f t h e v a r i a b l e s r a t h e r t h a n u p o n i m p l e m e n t a t i o n d e f a u l t s f o r

    s i n g l e a n d d o u b l e r e a l p r e c i s i o n . T h i s i n i t s e l f i s a p o w e r f u l t o o l f o r n u m e r i c a l r o b u s t n e s s .

    R e a l c o n s t a n t s o f a n y k i n d c a n b e f o r m e d b y a p p e n d i n g t h e k i n d v a l u e w i t h a n u n d e r s c o r e

    t o t h e d e f a u l t s i n g l e p r e c i s i o n r e a l c o n s t a n t s p r o v i d e d b y t h e l a n g u a g e . T h u s , u s i n g t h e k i n d

    v a l u e s d e n e d a b o v e :

    1 . 4 1 _ S I N G L E a n d 1 . 4 1 a r e t h e s a m e ,

    1 . 4 1 _ D O U B L E a n d 1 . 4 1 D 0 a r e t h e s a m e ,

    1 . 4 1 _ I E E E i s t h e I E E E v e r s i o n o f 1 . 4 1 ,

    1 . 4 1 _ P 9 i s t h e a p p r o p r i a t e 9 + d i g i t r e p r e s e n t a t i o n o f 1 . 4 1 , a n d

    t y p i c a l l y w i l l b e e q u i v a l e n t t o 1 . 4 1 _ S I N G L E o r 1 . 4 1 _ D O U B L E

    3 . 3 N u m e r i c P o l y m o r p h i s m

    A l l o f t h e c o m p u t a t i o n a l i n t r i n s i c f u n c t i o n s a r e g e n e r i c o v e r a l l o f t h e t y p e k i n d s p r o v i d e d b y

    t h e i m p l e m e n t a t i o n . T h u s , f o r e x a m p l e , t h e r e s u l t r e t u r n e d b y C O S ( X ) i s t h e a p p r o p r i a t e

    v a l u e o f k i n d S I N G L E , D O U B L E , I E E E , o r P 9 , d e p e n d i n g o n w h e t h e r X i s o f k i n d S I N G L E ,

    D O U B L E , I E E E , o r P 9 , r e s p e c t i v e l y . T h i s g e n e r i c p r o p e r t y a i d s s i g n i c a n t l y i n t h e d e v e l o p -

    m e n t o f p o r t a b l e r o b u s t a p p l i c a t i o n c o d e . I n t r i n s i c f u n c t i o n s a r e s i m i l a r l y g e n e r i c i n F o r t r a n

    7 7 , b u t a r o b u s t n e s s d e c i e n c y o f F o r t r a n 7 7 i s t h a t u s e r a n d i m p l e m e n t a t i o n ( a n d t h i r d

    p a r t y s o f t w a r e v e n d o r ) s u p p l i e d p r o c e d u r e s c a n n o t b e m a d e g e n e r i c o v e r a r g u m e n t t y p e s .

    F o r t r a n 9 0 r e m e d i e s t h i s d e c i e n c y . ( I n t h i s c h a p t e r \ p o l y m o r p h i s m " c a n b e a s s u m e d t o

    m e a n t h a t g e n e r i c p r o p e r t i e s , f a m i l i a r i n r e g a r d t o t h e F o r t r a n 7 7 i n t r i n s i c f u n c t i o n s , m a y

    b e s p e c i e d f o r a n d a r e t h e r e f o r e e x t e n d e d t o u s e r - d e n e d p r o c e d u r e s . )

    T h e i n t e r f a c e b l o c k c a n b e u s e d t o s p e c i f y a g e n e r i c n a m e f o r a s e t o f u s e r s u p p l i e d

    p r o c e d u r e s , o r t o a d d p r o c e d u r e s t o a n e x i s t i n g g e n e r i c n a m e . I n t h e f o l l o w i n g t w o e x a m p l e s ,

    t h e r s t i n t e r f a c e b l o c k d e n e s a n e w g e n e r i c n a m e ( S M O O T H ) a s s o c i a t e d w i t h f o u r s p e c i c

  • 8/4/2019 Fortran 90 and Computational Science

    24/49

    2 4

    p r o c e d u r e s , a n d t h e s e c o n d i n t e r f a c e b l o c k e x t e n d s t h e C O S i n t r i n s i c f u n c t i o n s t o a r g u m e n t s

    o f t y p e R A T I O N A L .

    I N T E R F A C E S M O O T H ! S M O O T H i s t h e g e n e r i c n a m e

    I N T E G E R F U N C T I O N S M O O T H _ I N T ( A A ) ! f o r p r o c e d u r e s S M O O T H _ I N T

    I N T E G E R : : A A ( : , : ) ! S M O O T H _ S I N G L E

    E N D F U N C T I O N S M O O T H _ I N T ! S M O O T H _ D O U B L E

    ! S M O O T H _ R A T I O N A L

    I N T E G E R F U N C T I O N S M O O T H _ S I N G L E ( A A )

    R E A L ( S I N G L E ) : : A A ( : , : ) ! A A i s a n a s s u m e d s h a p e t w o -

    E N D F U N C T I O N S M O O T H _ S I N G L E ! d i m e n s i o n a l a r r a y i n e a c h c a s e .

    I N T E G E R F U N C T I O N S M O O T H _ D O U B L E ( A A )

    R E A L ( D O U B L E ) : : A A ( : , : )

    E N D F U N C T I O N S M O O T H _ D O U B L E

    I N T E G E R F U N C T I O N S M O O T H _ R A T I O N A L ( A A )

    T Y P E ( R A T I O N A L ) : : A A ( : , : )

    E N D F U N C T I O N S M O O T H _ R A T I O N A L

    E N D I N T E R F A C E

    I N T E R F A C E C O S ! E x t e n d s t h e g e n e r i c p r o p e r t i e s

    F U N C T I O N R A T I O N A L _ C O S ( X ) ! o f C O S t o r e t u r n r e s u l t s o f

    T Y P E ( R A T I O N A L ) : : R A T I O N A L _ C O S ! t y p e R A T I O N A L , a s s u m i n g t h e

    T Y P E ( R A T I O N A L ) : : X ! a r g u m e n t i s o f t y p e R A T I O N A L .

    E N D F U N C T I O N R A T I O N A L _ C O S

    E N D I N T E R F A C E

    I n t h e S M O O T H e x a m p l e n o t i c e t h a t t h e a r g u m e n t ( A A ) i s a d i e r e n t t y p e i n e a c h c a s e

    b u t t h e f u n c t i o n r e s u l t i s t h e s a m e t y p e ( I N T E G E R i n e a c h c a s e ) . T h e f u n c t i o n r e s u l t c o u l d

    a l s o h a v e b e e n d i e r e n t i n s o m e o r a l l c a s e s . T h e o n l y r e q u i r e m e n t f o r s u c h a g e n e r i c s e t i s

    t h a t t h e t y p e / k i n d / r a n k p a t t e r n f o r t h e s e t o f d u m m y a r g u m e n t s b e u n i q u e i n e a c h s p e c i c

    c a s e . I n t h e C O S e x a m p l e , n o t e t h e c o n c e p t u a l s i m i l a r i t y w i t h t h e e x t e n s i o n o f t h e \ + "

    o p e r a t o r i n s e c t i o n 1 o n p a g e 1 , U s e r D e n e d T y p e s a n d O p e r a t o r s .

    T h e s e g e n e r i c d e n i t i o n c a p a b i l i t i e s m a k e i t p r a c t i c a l f o r t h e p r o g r a m m e r t o s p e c i f y p r e -

    c i s i o n w i t h t h e S E L E C T E D R E A L K I N D f u n c t i o n . T h e p r o g r a m c a n t h e n b e g e a r e d t o w a r d

    t h e o p t i m a l p r e c i s i o n f o r t h e a p p l i c a t i o n r a t h e r t h a n f o c u s s i n g o n t h e s p e c i c p r e c i s i o n s p r o -

    v i d e d b y t h e i m p l e m e n t a t i o n . T h i s n o t o n l y i s a m o r e n a t u r a l w a y t o d e v e l o p n u m e r i c a l

    s o f t w a r e , b u t i t c o n t r i b u t e s t o n u m e r i c a l r o b u s t n e s s a s w e l l . F o r t r a n 7 7 , C , a n d F o r t r a n 9 0

    v e r s i o n s o f ( o n e v a r i a t i o n o f ) t h e r o u t i n e S M O O T H a r e g i v e n i n s e c t i o n 2 . 1 .

  • 8/4/2019 Fortran 90 and Computational Science

    25/49

    N u m e r i c a l R o b u s t n e s s 2 5

    3 . 4 T h e N u m e r i c A p p r o x i m a t i o n M o d e l

    D y n a m i c a c c e s s t o t h e n u m e r i c a l p r o p e r t i e s o f t h e i m p l e m e n t a t i o n c a n e n a b l e t h e d e v e l o p -

    m e n t o f p o r t a b l e n u m e r i c a l l y r o b u s t s o f t w a r e . F o r t r a n 9 0 p r o v i d e s s u c h a c c e s s t h r o u g h a

    c o m b i n a t i o n o f a m o d e l o f t h e m e t h o d s f o r a p p r o x i m a t i n g r e a l v a l u e s a n d a s e t o f c o r r e -

    s p o n d i n g i n t r i n s i c f u n c t i o n s f o r e x t r a c t i n g m o d e l v a l u e s . T h e s e i n t r i n s i c f u n c t i o n s , o f w h i c h

    t h e r e a r e a t o t a l o f 1 6 , a r e c a l l e d t h e e n v i r o n m e n t a l i n q u i r y ( n i n e ) a n d n u m e r i c m a n i p u l a t i o n

    ( s e v e n ) i n t r i n s i c f u n c t i o n s .

    E a c h k i n d o f r e a l n u m b e r i s m o d e l e d b y

    x = s b

    e

    X

    f

    i

    b

    ; i

    i = 1 : : : p ( 1 )

    w h e r e

    x i s t h e r e a l v a l u e

    s i s ( t h e s i g n o f t h e v a l u e )

    b i s t h e r a d i x ( b a s e ) a n d i s u s u a l l y 2 b i s c o n s t a n t f o r a g i v e n r e a l k i n d

    p i s t h e b a s e b p r e c i s i o n p i s c o n s t a n t f o r a g i v e n r e a l k i n d

    e i s t h e b a s e b e x p o n e n t o f t h e v a l u e

    f

    i

    i s t h e i

    t h

    d i g i t , b a s e b , o f t h e v a l u e 0 < f

    i

    < b

    f

    1

    m a y b e 0 o n l y i f a l l f

    i

    a r e 0

    T h e p r i n c i p a l c h a r a c t e r i s t i c s o f a g i v e n r e a l k i n d a r e i t s v a l u e s f o r b a n d p a n d i t s r a n g e

    f o r e

    I E E E a r i t h m e t i c i s b a s e d u p o n a b i n a r y ( b = 2 ) r e p r e s e n t a t i o n i n w h i c h p = 2 4 ( s i n g l e p r e c i -

    s i o n ) , p = 5 6 ( d o u b l e p r e c i s i o n ) , a n d ; 1 2 7 < e

  • 8/4/2019 Fortran 90 and Computational Science

    26/49

    2 6

    w h i c h m a y b e a c o n s t a n t , s c a l a r v a r i a b l e , o r a r r a y v a r i a b l e . I f i t i s a v a r i a b l e , i t s v a l u e n e e d

    n o t b e d e n e d b e c a u s e o n l y t h e t y p e k i n d o f t h e a r g u m e n t i s u s e d b y t h e s e f u n c t i o n s , n o t t h e

    v a l u e o f t h e a r g u m e n t . T h e s e n i n e c h a r a c t e r i s t i c v a l u e s a n d r e l a t e d e n v i r o n m e n t a l i n t r i n s i c

    f u n c t i o n s s h o w n i n T a b l e 2 :

    c h a r a c t e r i s t i c v a l u e s o f a r e a l k i n d i n t r i n s i c f u n c t i o n n a m e

    t h e d e c i m a l p r e c i s i o n P R E C I S I O N

    t h e d e c i m a l e x p o n e n t r a n g e R A N G E

    t h e l a r g e s t v a l u e H U G E

    t h e s m a l l e s t v a l u e T I N Y

    a s m a l l v a l u e c o m p a r e d t o 1 b

    1

    ; p E P S I L O N

    t h e b a s e b R A D I X

    t h e v a l u e o f p D I G I T S

    t h e m i n i m u m v a l u e o f e M I N E X P O N E N T

    t h e m a x i m u m v a l u e o f e M A X E X P O N E N T

    T a b l e 2 :

    O f t h e s e n i n e v a l u e s , H U G E , T I N Y , a n d E P S I L O N a r e e s p e c i a l l y u s e f u l i n w r i t i n g r o b u s t

    p o r t a b l e n u m e r i c a l s o f t w a r e , t h o u g h i n s p e c i a l i z e d c o n t e x t s t h e o t h e r s a r e t a n t a m o u n t t o

    i n d i s p e n s a b l e .

    T h e s e v e n n u m e r i c m a n i p u l a t i o n f u n c t i o n s a l l o w t h e p r o g r a m m e r t o a c c e s s i m p o r t a n t

    m o d e l v a l u e s r e l a t e d t o a g i v e n s p e c i c v a l u e o f t h a t k i n d . T h e g i v e n v a l u e i s t h e v a l u e o f

    t h e ( r s t ) a r g u m e n t , w h i c h m a y b e a n y e x p r e s s i o n t h a t h a s a ( d e n e d ) v a l u e o f t h a t k i n d .

    ( T h r e e o f t h e s e s e v e n f u n c t i o n s a l s o h a v e a s e c o n d a r g u m e n t . ) T h e s e s e v e n u s e f u l v a l u e s a n d

    t h e r e l a t e d n u m e r i c m a n i p u l a t i o n i n t r i n s i c f u n c t i o n s a r e s h o w n i n T a b l e 3 :

    v a l u e s r e l a t e d t o t h e a r g u m e n t v a l u e i n t r i n s i c f u n c t i o n n a m e

    e x p o n e n t v a l u e , e E X P O N E N T

    f r a c t i o n a l p a r t , s

    P

    f

    i

    b

    ; i

    F R A C T I O N

    n e a r e s t v a l u e ( s e c o n d a r g u m e n t s p e c i e s d i r e c t i o n ) N E A R E S T

    r e c i p r o c a l o f t h e r e l a t i v e s p a c i n g n e a r t h e a r g u m e n t R R S P A C I N G

    c h a n g e e b y v a l u e o f t h e s e c o n d a r g u m e n t S C A L E

    s e t e t o v a l u e o f s e c o n d a r g u m e n t S E T E X P O N E N T

    a b s o l u t e s p a c i n g n e a r t h e a r g u m e n t S P A C I N G

    T a b l e 3 :

    A n ( i d e a l i z e d ) e x a m p l e w i l l i l l u s t r a t e t h e u s e o f t h e s e f u n c t i o n s f o r w r i t i n g r o b u s t p o r t a b l e

    c o d e . I n t h i s e x a m p l e N e w t o n ' s m e t h o d i s u s e d t o n d t h e r o o t t o m a x i m u m a c c u r a c y ( f o r

  • 8/4/2019 Fortran 90 and Computational Science

    27/49

    D a t a P a r a l l e l i s m 2 7

    t h e r e a l k i n d b e i n g u s e d ) o f a f u n c t i o n F , i n t h e m i n i m u m n u m b e r o f i t e r a t i o n s . T h i s e x a m p l e

    a s s u m e s t h e f u n c t i o n F a n d i t s d e r i v a t i v e f u n c t i o n D F a r e a v a i l a b l e , a n d t h a t t h e v a l u e X i s

    a l r e a d y e s t a b l i s h e d i n a r e g i o n i n w h i c h N e w t o n ' s m e t h o d w i l l c o n v e r g e t o t h e r o o t .

    d o

    D X = F ( X ) / D F ( X ) ! C o m p u t e t h e n e x t d e l t a - X .

    X = X - D X

    i f ( D X < 2 * s p a c i n g ( X ) ) e x i t ! S t o p i f n e a r t h e s p a c i n g

    e n d d o ! l i m i t s o f t h a t k i n d

    . . . ! i n t h i s r e g i o n .

    4 D a t a P a r a l l e l i s m

    F u n d a m e n t a l p h y s i c a l p h e n o m e n a , s u c h a s t h e r m a l g e n e r a t i o n / d i s s i p a t i o n p r o p e r t i e s a n d

    e l e c t r o n i c s i g n a l s p e e d s , p l a c e t h e o r e t i c a l a n d p r a c t i c a l l i m i t s o n t h e c o m p u t a t i o n s p e e d s

    o f s i n g l e p r o c e s s o r s y s t e m s . T h o u g h t h e s e l i m i t s a r e c u r r e n t l y r o u g h l y i n t h e \ g i g a o p " ( a

    b i l l i o n n u m e r i c a l o p e r a t i o n s p e r s e c o n d ) r a n g e , s o m e c o n t e m p o r a r y a p p l i c a t i o n s o f c o m p u -

    t a t i o n a l s c i e n c e r e q u i r e s u b s t a n t i a l l y g r e a t e r s p e e d s , a s w i l l m o s t a p p l i c a t i o n s o n t h e s c a l e

    o f g r a n d c h a l l e n g e p r o b l e m s . I t i s b e c o m i n g m o r e f e a s i b l e t o s c a l e u p c o m p u t a t i o n a l c a -

    p a c i t y b y a d d i n g p r o c e s s o r s t h a n b y i n c r e a s i n g s i n g l e p r o c e s s o r s p e e d . I t i s l i k e l y t h a t a l l

    f u t u r e a p p l i c a t i o n s i n v o l v i n g m a s s i v e a m o u n t s o f c o m p u t a t i o n w i l l m a k e s i g n i c a n t u s e o f

    p a r a l l e l i s m .

    A p p l i c a t i o n s m a y e m p l o y ( e i t h e r o r b o t h o f ) t w o p r i n c i p a l f o r m s o f p a r a l l e l i s m , w h i c h

    h e r e w i l l b e t e r m e d \ d a t a p a r a l l e l i s m " a n d \ p r o c e s s p a r a l l e l i s m " . D a t a p a r a l l e l i s m i n v o l v e s

    p e r f o r m i n g a s i m i l a r c o m p u t a t i o n o n m a n y d a t a o b j e c t s s i m u l t a n e o u s l y . T h e p r o t o t y p i c a l

    s u c h s i t u a t i o n , e s p e c i a l l y f o r c o m p u t a t i o n a l s c i e n c e a p p l i c a t i o n s , i s s i m u l t a n e o u s o p e r a t i o n s

    o n a l l t h e e l e m e n t s o f a n a r r a y - f o r e x a m p l e , d i v i d i n g e a c h e l e m e n t o f t h e a r r a y b y a g i v e n

    v a l u e ( e . g . , n o r m a l i z i n g t h e p i v o t r o w i n m a t r i x r e d u c t i o n ) .

    F o r t h e p u r p o s e s h e r e d a t a p a r a l l e l i s m w i l l m e a n c o n c u r r e n t o p e r a t i o n s o n a r r a y e l e m e n t s .

    P r o c e s s p a r a l l e l i s m i n v o l v e s p e r f o r m i n g d i e r e n t p r o c e s s e s i n p a r a l l e l , w h e r e a p r o c e s s i s a n

    a r b i t r a r y s e q u e n c e o f c o m p u t a t i o n s . A s u b r o u t i n e , f o r e x a m p l e , i s a p r o c e s s , a s i s a n y

    b l o c k o f s t a t e m e n t s . A n i n c r e a s i n g l y i m p o r t a n t f o r m o f p r o c e s s p a r a l l e l i s m i s e v a l u a t i n g

    t w o e x p r e s s i o n s s i m u l t a n e o u s l y - t w o a c t u a l a r g u m e n t s , f o r e x a m p l e , i n a p r o c e d u r e c a l l . A

    n u m b e r o f a p p r o a c h e s t o s p e c i f y i n g p r o c e s s p a r a l l e l i s m h a v e b e e n d e v e l o p e d , a n d p r o c e s s

    p a r a l l e l i s m s t a n d a r d s a r e b e g i n n i n g t o a p p e a r 3 ] . T h i s t y p e o f p a r a l l e l i s m w i l l b e d i s c u s s e d

    i n t h e n e x t r e l e a s e o f t h i s c h a p t e r .

    P r o c e s s p a r a l l e l i s m m a y b e i m p o r t a n t i n m a n y a p p l i c a t i o n s o f c o m p u t a t i o n a l s c i e n c e ,

    b u t b e c a u s e o f t h e u b i q u i t o u s n e s s o f a r r a y s i n s u c h a p p l i c a t i o n s , d a t a p a r a l l e l i s m i s l i k e l y

    t o b e u s e f u l i n m o s t a n d c r i t i c a l i n m a n y . T h i s s e c t i o n t h e r e f o r e f o c u s e s o n p a r a l l e l a r r a y

  • 8/4/2019 Fortran 90 and Computational Science

    28/49

    2 8

    o p e r a t i o n s , w i t h p a r t i c u l a r e m p h a s i s o n t h e e x t r a o r d i n a r i l y r i c h s e t o f s u c h o p e r a t i o n s i n

    F o r t r a n 9 0 .

    4 . 1 A r r a y O p e r a t i o n s

    A P L w a s p e r h a p s i n m a n y r e s p e c t s t h e c o m p u t e r l a n g u a g e t h a t p i o n e e r e d t h e c o n c e p t o f a n

    a r r a y a s a d a t a o b j e c t i n i t s o w n r i g h t a n d n o t j u s t a c a r t e s i a n c o l l e c t i o n o f d a t a o b j e c t s .

    O p e r a t i o n s c a n b e p e r f o r m e d o n w h o l e a r r a y s , s u c h a s

    C A + B ( 2 )

    w h e r e A , B , a n d C m a y a l l b e a r r a y s f o r e x a m p l e A , B , a n d C c o u l d a l l b e t w o d i m e n s i o n a l

    a r r a y s o f s i z e 2 0 0 x 3 0 0 . T h e m e a n i n g o f s u c h a n o p e r a t i o n i s C

    i j

    A

    i j

    + B

    i j

    f o r a l l 2 0 0 v a l u e s

    o f i a n d 3 0 0 v a l u e s o f j , f o r a t o t a l i n t h i s c a s e o f 6 0 , 0 0 0 i n d i v i d u a l c o m p u t a t i o n s i n v o l v i n g

    t h e a r r a y e l e m e n t s . T h e A P L m o d e l , t h e r e f o r e , i s c o n c u r r e n t e l e m e n t - b y - c o r r e s p o n d i n g -

    e l e m e n t c o m p u t a t i o n f o r a l l t h e e l e m e n t s i n t h e a r r a y ( s ) . ( T h o u g h f e w i m p l e m e n t a t i o n s o f

    A P L c a p i t a l i z e d o n t h i s c o n c e p t u a l p a r a l l e l i s m . )

    I n a d d i t i o n t o s u p p o r t i n g a l l t h e u s u a l m a t h e m a t i c a l o p e r a t i o n s , i n a m a n n e r a n a l o g o u s

    t o t h a t s h o w n a b o v e f o r a d d i t i o n , A P L d e n e d o t h e r w h o l e a r r a y o p e r a t i o n s n e c e s s a r y f o r

    a r e a s o n a b l y c o m p l e t e p a r a d i g m i n w h i c h a r r a y s a r e o b j e c t s i n t h e i r o w n r i g h t . T h e s e

    i n c l u d e r e d u c t i o n o p e r a t i o n s ( e . g . , + / A m e a n s s u m a l l t h e e l e m e n t s o f a r r a y A ) , c o n s t r u c t i o n

    o p e r a t i o n s ( e . g . , i 4 c o n s t r u c t s a v e c t o r o f f o u r e l e m e n t s w h o s e v a l u e s a r e 1 , 2 , 3 , 4 ) , a n d i n q u i r y

    o p e r a t i o n s ( e . g . , i f B r e t u r n s t h e s h a p e o f a r r a y B - a v e c t o r w h o s e s i z e i s t h e r a n k o f B

    a n d w h o s e e l e m e n t v a l u e s a r e t h e c o r r e s p o n d i n g d i m e n s i o n s i z e s o f B - t h e n * / B c o m p u t e s

    t h e t o t a l n u m b e r o f e l e m e n t s i n a r r a y B ) . A l l s u c h o p e r a t i o n s c a n b e c o m b i n e d i n t o m o r e

    a r b i t r a r i l y c o m p l e x a r r a y - v a l u e d e x p r e s s i o n s ( e . g . , f o r a o n e - d i m e n s i o n a l a r r a y Q , * / Q +

    i * / Q i s e v a l u a t e d r i g h t t o l e f t ( t h a t ' s