24.07.2013 Views

Capítulo 8. Funções e Subrotinas - UFMG

Capítulo 8. Funções e Subrotinas - UFMG

Capítulo 8. Funções e Subrotinas - UFMG

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

112 <strong>8.</strong>3. Módulos<br />

Aqui, os nomes R e S são usado para acessar as variáveis globais A e B, definidas no módulo, caso estes nomes<br />

últimos sejam usados para diferentes variáveis na mesma unidade de programa. Os símbolos “=>“ promovem a<br />

ligação do nome local com o nome no módulo. Tudo se passa como se R fosse o apelido de A e S o apelido de B<br />

nesta unidade de programa. Os ponteiros em Fortran 90/95 também atuam como apelidos, porém, neste caso,<br />

pode-se usar tanto o nome verdadeiro de uma variável quanto o nome de um ponteiro que aponta a ela.<br />

Existe também uma forma da declaração USE que limita o acesso somente a certos objetos dentro de um<br />

módulo. Este recurso não é exatamente igual ao uso dos atributos PUBLIC ou PRIVATE (seção <strong>8.</strong>3.3), uma vez<br />

que ele atua somente na unidade que acessa o módulo, e não sobre o módulo em geral. O recurso requer o uso<br />

do qualificador ONLY, seguido de dois pontos “:” e uma :<br />

USE , ONLY: <br />

Por exemplo para tornar somente as variáveis A e C do módulo GLOBAIS acessíveis em uma dada unidade de<br />

programa, a declaração fica:<br />

...<br />

USE GLOBAIS, ONLY: A, C<br />

...<br />

Os dois últimos recursos podem ser também combinados:<br />

...<br />

USE GLOBAIS, ONLY: R => A<br />

...<br />

para tornar somente a variável A acessível, porém com o nome R. Uma unidade de programa pode ter mais<br />

de uma declaração USE referindo-se ao mesmo módulo. Por conseguinte, deve-se notar que que um USE com o<br />

qualificador ONLY não cancela uma declaração USE menos restritiva.<br />

Um uso freqüente de módulos para armazenar dados globais consiste em definições de parâmetros de espécie<br />

de tipo, constantes universais matemáticas e/ou físicas e outros objetos estáticos, como no exemplo abaixo:<br />

! Module Esp const <br />

! Define e s p é c i e s de t i p o padrões e c o n s t a n t e s u n i v e r s a i s .<br />

!<br />

MODULE e s p c o n s t<br />

!<br />

INTEGER, PARAMETER : : I4B = SELECTED INT KIND( 9 )<br />

INTEGER, PARAMETER : : I2B = SELECTED INT KIND( 4 )<br />

INTEGER, PARAMETER : : I1B = SELECTED INT KIND( 2 )<br />

integer , parameter : : sp= kind ( 1 . 0 )<br />

integer , parameter : : dp= s e l e c t e d r e a l k i n d (2 precision ( 1 . 0 sp ) )<br />

integer , parameter : : qp= s e l e c t e d r e a l k i n d (2 precision ( 1 . 0 dp ) )<br />

complex( kind= dp ) , parameter : : z1= ( 1 . 0 dp , 0 . 0 dp ) , z i= ( 0 . 0 dp , 1 . 0 dp )<br />

REAL(DP) , PARAMETER : : PI= 3.14159265358979323846264338327950288419717 dp<br />

REAL(DP) , PARAMETER : : PID2= 1.57079632679489661923132169163975144209858 dp<br />

REAL(DP) , PARAMETER : : TWOPI= 6.28318530717958647692528676655900576839434 dp<br />

real ( dp ) , parameter : : r t p i= 1.77245385090551602729816748334114518279755 dp<br />

REAL(DP) , PARAMETER : : SQRT2= 1.41421356237309504880168872420969807856967 dp<br />

real ( dp ) , parameter : : e u l e r e= 2.71828182845904523536028747135266249775725 dp<br />

REAL(SP) , PARAMETER : : PI S= 3.14159265358979323846264338327950288419717 sp<br />

REAL(SP) , PARAMETER : : PID2 S= 1.57079632679489661923132169163975144209858 sp<br />

REAL(SP) , PARAMETER : : TWOPI s= 6.28318530717958647692528676655900576839434 sp<br />

real ( sp ) , parameter : : r t p i s= 1.77245385090551602729816748334114518279755 sp<br />

REAL(SP) , PARAMETER : : SQRT2 S= 1.41421356237309504880168872420969807856967 sp<br />

!<br />

! Fundamental p h y s i c a l constants , o b t a i n e d from NIST :<br />

! h t t p :// p h y s i c s . n i s t . gov /cuu/ Constants / index . html<br />

real ( dp ) , parameter : : rmemp= 5.4461702173 e−4 dp ! Electron −proton mass r a t i o .<br />

real ( dp ) , parameter : : rmpme= 1836.15267261 dp ! Protron−e l e c t r o n mass r a t i o .<br />

END MODULE e s p c o n s t<br />

Autor: Rudi Gaelzer – IFM/UFPel Impresso: 23 de abril de 2008

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

Saved successfully!

Ooh no, something went wrong!