Capítulo 8. Funções e Subrotinas - UFMG
Capítulo 8. Funções e Subrotinas - UFMG
Capítulo 8. Funções e Subrotinas - UFMG
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