Pergunta
Como faço para declarar uma função particular em Fortran?
Solução
Isto só irá funcionar com um módulo Fortran 90. Em sua declaração do módulo, você pode especificar os limites de acesso para uma lista de variáveis ??e rotinas usando o "público" e palavras-chave "privadas". Eu costumo achar que é útil usar a palavra-chave privada, por si só, inicialmente, que especifica que tudo dentro do módulo é privado, a menos público explicitamente marcada.
No exemplo de código abaixo, subroutine_1 () e função_1 () são acessíveis a partir do exterior do módulo através do requisito declaração "uso", mas qualquer outra variável / sub-rotina / função será privado.
module so_example
implicit none
private
public :: subroutine_1
public :: function_1
contains
! Implementation of subroutines and functions goes here
end module so_example
Outras dicas
Se você usar módulos, aqui é a sintaxe:
PUBLIC :: subname-1, funname-2, ...
PRIVATE :: subname-1, funname-2, ...
Todas as entidades listadas em privado não será acessível a partir do exterior do módulo e todas as entidades listadas em público pode ser acessado de fora do módulo. Todas as outras entidades, por padrão, pode ser acessado de fora do módulo.
MODULE Field
IMPLICIT NONE
Integer :: Dimen
PUBLIC :: Gravity
PRIVATE :: Electric, Magnetic
CONTAINS
INTEGER FUNCTION Gravity()
..........
END FUNCTION Gravity
REAL FUNCTION Electric()
..........
END FUNCTION
REAL FUNCTION Magnetic()
..........
END FUNCTION
..........
END MODULE Field
Eu nunca escrevi uma linha de Fortran, mas esta discussão sobre os 'procedimentos do módulo privada' parece ser tópico, pelo menos eu espero que sim. Parece conter respostas, pelo menos.
jaredor resumo:
O atributo público / privado existe dentro de módulos em Fortran 90 e posterior. Fortran 77 e anteriores -. Você está fora de sorte
Private xxx, yyy, zzz
real function xxx (v)
...
end function xxx
integer function yyy()
...
end function yyy
subroutine zzz ( a,b,c )
...
end subroutine zzz
...
other stuff that calls them
...