Apostila Fortran - Prof. Rudi Gaelzer UFPEL

Apostila Fortran - Prof. Rudi Gaelzer UFPEL

(Parte 1 de 7)

Introdu c~ao ao Fortran 90/95

Apostila preparada para a disciplina de Modelos Computacionais da F sica I, ministrada para o Curso de Licenciatura em F sica do Departamento de F sica, Instituto de F sica e Matem atica, Funda c~ao Universidade Federal de Pelotas, Pelotas - RS.

In cio: Janeiro de 2005. Vers~ao: 24 de fevereiro de 2009

Click to buy NOW! Click to buy NOW!

Referencias Bibliogr a cas v

1.1 As origens da Linguagem Fortran1
1.2 O padr~ao Fortran 902
1.2.1 Recursos novos do Fortran 903
1.2.2 Recursos em obsolescencia do Fortran 903
1.2.3 Recursos removidos do Fortran 904
1.3 Uma revis~ao menor: Fortran 954
1.3.1 Recursos novos do Fortran 954
1.3.2 Recursos em obsolescencia do Fortran 955
1.3.3 Recursos removidos do Fortran 955
1.4 O Fortran no Seculo XXI: Fortran 20036
1.4.1 Recursos novos do Fortran 20036
1.4.2 Recursos em obsolescencia do Fortran 20036
1.4.3 Recursos removidos do Fortran 20037
1.5 O novo padr~ao: Fortran 20087
1.5.1 Recursos novos do Fortran 20087
1.6 Comentarios sobre a bibliogra a8
1.7 Agradecimentos8
2.1 Formato do programa-fonte9
2.2 Nomes em Fortran 90/951
2.3 Entrada e sada padr~oes1
2.4 Conjunto de caracteres aceitos12

2 Formato do C odigo-Fonte 9

3.1 Declarac~ao de tipo de variavel13
3.2 Variaveis do tipo INTEGER14
3.3 Variaveis do tipo REAL14
3.4 Variaveis do tipo COMPLEX15
3.5 Variaveis do tipo CHARACTER15
3.6 Variaveis do tipo LOGICAL17
3.7 O conceito de especie (kind)17
3.7.1 Fortran 717
3.7.2 Fortran 90/9517
3.7.2.1 Compilador Intel® Fortran18
3.7.2.2 Compilador gfortran18
3.7.2.3 Compilador F19
3.7.2.4 Literais de diferentes especies21
3.7.3 Func~oes intrnsecas associadas a especie2
3.7.3.1 KIND(X)2
3.7.3.2 SELECTED_REAL_KIND(P,R)2
3.7.3.3 SELECTED_INT_KIND(R)23
3.8 Tipos derivados23

3 Tipos de Vari aveis 13 i

4.1 Regras basicas27
4.2 Express~oes numericas escalares28
4.3 Atribuic~oes numericas escalares29
4.4 Operadores relacionais30
4.5 Express~oes e atribuic~oes logicas escalares30
4.6 Express~oes e atribuic~oes de caracteres escalares32

4 Express~oes e Atribui c~oes Escalares 27

5.1 Comandos obsoletos do Fortran 735
5.1.1 Rotulos (statement labels)35
5.1.2 Comando GO TO incondicional36
5.1.3 Comando GO TO computado36
5.1.4 Comando IF aritmetico36
5.1.5 Comandos ASSIGN e GO TO atribudo37
5.1.6 Lacos DO rotulados37
5.2 Comando e construto IF38
5.2.1 Comando IF38
5.2.2 Construto IF38
5.3 Construto CASE39
5.4 Construto DO41
5.4.1 Construto DO ilimitado43
5.4.2 Instruc~ao EXIT43
5.4.3 Instruc~ao CYCLE4

5 Comandos e Construtos de Controle de Fluxo 35

6.1 Terminologia e especi cac~oes de matrizes47
6.2 Express~oes e atribuic~oes envolvendo matrizes51
6.3 Sec~oes de matrizes53
6.3.1 Subscritos simples54
6.3.2 Tripleto de subscritos54
6.3.3 Vetores de subscritos54
6.4 Atribuic~oes de matrizes e sub-matrizes5
6.5 Matrizes de tamanho zero5
6.6 Construtores de matrizes57
6.6.1 A func~ao intrnseca RESHAPE58
6.6.2 A ordem dos elementos de matrizes58
6.7 Rotinas intrnsecas elementais aplicaveis a matrizes59
6.8 Comando e construto WHERE59
6.8.1 Comando WHERE59
6.8.2 Construto WHERE60
6.9 Matrizes alocaveis61
6.10 Comando e construto FORALL64
6.10.1 Comando FORALL64
6.10.2 Construto FORALL64

6 Processamento de Matrizes 47

7.1 Categorias de rotinas intrnsecas67
7.2 Declarac~ao e atributo INTRINSIC67
7.3 Func~oes inquisidoras de qualquer tipo68
7.4 Func~oes elementais numericas68
7.4.1 Func~oes elementais que podem converter68
7.4.2 Func~oes elementais que n~ao convertem69
7.5 Func~oes elementais matematicas69
7.6 Func~oes elementais logicas e de caracteres70
7.6.1 Convers~oes caractere-inteiro70
7.6.2 Func~oes de comparac~ao lexica70
7.6.3 Func~oes elementais para manipulac~oes de strings71
7.6.4 Convers~ao logica71

7 Rotinas Intr nsecas 67 Autor: Rudi Gaelzer { IFM/UFPel Impresso: 24 de fevereiro de 2009

7.7 Func~oes n~ao-elementais para manipulac~ao de strings71
7.7.1 Func~ao inquisidora para manipulac~ao de strings71
7.7.2 Func~oes transformacionais para manipulac~ao de strings71
7.8 Func~oes inquisidoras e de manipulac~oes numericas72
7.8.1 Modelos para dados inteiros e reais72
7.8.2 Func~oes numericas inquisidoras72
7.8.3 Func~oes elementais que manipulam quantidades reais73
7.8.4 Func~oes transformacionais para valores de especie (kind)73
7.9 Rotinas de manipulac~ao de bits73
7.9.1 Func~ao inquisidora74
7.9.2 Func~oes elementais74
7.9.3 Subrotina elemental75
7.10 Func~ao de transferencia75
7.1 Func~oes de multiplicac~ao vetorial ou matricial75
7.12 Func~oes transformacionais que reduzem matrizes75
7.12.1 Caso de argumento unico75
7.12.2 Argumento opcional DIM76
7.12.3 Argumento opcional MASK76
7.13 Func~oes inquisidoras de matrizes76
7.13.1 Status de alocac~ao76
7.13.2 Limites, forma e tamanho76
7.14 Func~oes de construc~ao e manipulac~ao de matrizes7
7.14.1 Func~ao elemental MERGE7
7.14.2 Agrupando e desagrupando matrizes7
7.14.3 Alterando a forma de uma matriz7
7.14.4 Func~ao transformacional para duplicac~ao78
7.14.5 Func~oes de deslocamento matricial78
7.14.6 Transposta de uma matriz78
7.15 Func~oes transformacionais para localizac~ao geometrica78
7.16 Func~ao transformacional para dissociac~ao de ponteiro78
7.17 Subrotinas intrnsecas n~ao-elementais79
7.17.1 Relogio de tempo real79
7.17.2 Tempo da CPU79
7.17.3 Numeros aleatorios79
8.1 Unidades de programa81
8.1.1 Programa principal81
8.1.2 Rotinas externas83
8.1.3 Modulos83
8.2 sub-programas83
8.2.1 Func~oes e subrotinas83
8.2.2 Rotinas internas85
8.2.3 Argumentos de sub-programas85
8.2.4 Comando RETURN86
8.2.5 Atributo e declarac~ao INTENT86
8.2.6 Rotinas externas e bibliotecas8
8.2.7 Interfaces implcitas e explcitas8
8.2.8 Argumentos com palavras-chave90
8.2.9 Argumentos opcionais93
8.2.10 Tipos derivados como argumentos de rotinas94
8.2.1 Matrizes como argumentos de rotinas94
8.2.1.1 Matrizes como argumentos em Fortran 794
8.2.1.2 Matrizes como argumentos em Fortran 90/9596
8.2.12 sub-programas como argumentos de rotinas9
8.2.13 Func~oes de valor matricial100
8.2.14 Recursividade e rotinas recursivas103
8.2.15 Atributo e declarac~ao SAVE105

8 Sub-Programas e M odulos 81 Autor: Rudi Gaelzer { IFM/UFPel Impresso: 24 de fevereiro de 2009

8.2.16 Func~oes de efeito lateral e rotinas puras106
8.2.17 Rotinas elementais108
8.3 Modulos109
8.3.1 Dados globais110
8.3.2 Rotinas de modulos113
8.3.3 Atributos e declarac~oes PUBLIC e PRIVATE115
8.3.4 Interfaces e rotinas genericas116
8.3.5 Estendendo rotinas intrnsecas via blocos de interface genericos120
8.4 Ambito (Scope)120
8.4.1 Ambito dos rotulos120
8.4.2 Ambito dos nomes121
9.1 Comandos de Entrada/Sada: introduc~ao rapida123
9.2 Declarac~ao NAMELIST127
9.3 Unidades logicas131
9.4 Comando OPEN131
9.5 Comando READ134
9.6 Comandos PRINT e WRITE135
9.7 Comando FORMAT e especi cador FMT=136
9.8 Descritores de edic~ao137
9.8.1 Contadores de repetic~ao137
9.8.2 Descritores de edic~ao de dados138
9.8.3 Descritores de controle de edic~ao141
9.8.4 Descritores de edic~ao de strings147
9.9 Comando CLOSE148
9.10 Comando INQUIRE148
9.1 Outros comandos de posicionamento151
9.1.1 Comando BACKSPACE151
9.1.2 Comando REWIND151
9.1.3 Comando ENDFILE151

9 Comandos de Entrada/Sa da de Dados 123 Autor: Rudi Gaelzer { IFM/UFPel Impresso: 24 de fevereiro de 2009

Referencias Bibliogr a cas

[1] Intel® Fortran Compiler for Linux. http://www.intel.com/software/products/compilers/ in/docs/manuals.htm. Acesso em: 01 jun. 2005.

[2] MARSHALL, A. C. Fortran 90 Course Notes. http://www.liv.ac.uk/HPC/HTMLFrontPageF90.html 1996. Acesso em: 01 jun. 2005.

[3] METCALF, MICHAEL, REID, JOHN. Fortran 90/95 Explained. New York : Oxford University Press, 1996, 345 + xv p.

[4] PAGE, CLIVE G. Professional Programer’s Guide to Fortran77. http://www.star.le.ac.uk/ cgp/prof77.pdf, Leicester, 2001. Acesso em: 01 jun. 2005.

[5] RAMSDEN, S., LIN, F., PETTIPHER, M. A., NOLAND, G. S., BRO-

OKE, J. M. Fortran 90. A Conversion Course for Fortran 7 Programmers. http://www.hpctec.mcc.ac.uk/hpctec/courses/Fortran90/F90course.html 1995. Acesso em: 01 jun. 2005.

[6] REID, JOHN. The New Features of Fortran 2003. http://www.kcl.ac.uk/kis/support/cit/fortran/john reid new 2003.pdf, 2004. Acesso em: 03 Jun. 2006.

vi REFERENCIAS BIBLIOGR AFICAS Autor: Rudi Gaelzer { IFM/UFPel Impresso: 24 de fevereiro de 2009

neering computation in the year 2000 will bebut I know it will be called Fortran."

”I don’t know what the technical characteristics of the standard language for scientific and engi- John Backus

Esta apostila destina-se ao aprendizado da Linguagem de Programa c~ao Fortran 95.

1.1 As origens da Linguagem Fortran

Programa c~ao no per odo inicial do uso de computadores para a solu c~ao de problemas em f sica, qu mica, engenharia, matem atica e outras areas da ciencia era um processo complexo e tedioso ao extremo. Programadores necessitavam de um conhecimento detalhado das instru c~oes, registradores, endere cos de mem oria e outros constituintes da Unidade Central de Processamento (CPU1) do computador para o qual eles escreviam o c odigo. O Codigo-Fonte era escrito em um nota c~ao num erica denominada codigo octal. Com o tempo, c odigos mnemonicos foram introduzidos, uma forma de programa c~ao conhecida como codigo numerico ou codigo Assembler. Estes c odigos eram traduzidos em instru c~oes para a CPU por programas conhecidos como Assemblers. Durante os anos 50 cou claro que esta forma de programa c~ao era de todo inconveniente, no m nimo, devido ao tempo necess ario para se escrever e testar um programa, embora esta forma de programa c~ao possibilitasse um uso otimizado dos recursos da CPU.

Estas di culdades motivaram que um time de programadores da IBM, liderados por John Backus, desenvolvessem uma das primeiras chamadas linguagem de alto-nıvel, denominada FORTRAN (signi cando FORmula TRANslation). Seu objetivo era produzir uma linguagem que fosse simples de ser entendida e usada, mas que gerasse um c odigo num erico quase t~ao e ciente quanto a linguagem Assembler. Desde o in cio, o Fortran era t~ao simples de ser usado que era poss vel programar f ormulas matem aticas quase como se estas fossem escritas de forma simb olica. Isto permitiu que programas fossem escritos mais rapidamente que antes, com somente uma pequena perda de e ciencia no processamento, uma vez que todo cuidado era dedicado na constru c~ao do compilador, isto e, no programa que se encarrega de traduzir o c odigo-fonte em Fortran para c odigo Assembler ou octal.

Mas o Fortran foi um passo revolucion ario tamb em porque o programadores foram aliviados da tarefa tediosa de usar Assembler, assim concentrando-se mais na solu c~ao do problema em quest~ao. Mais importante ainda, computadores se tornaram acess veis a qualquer cientista ou engenheiro disposto a devotar um pequeno esfor co na aquisi c~ao de um conhecimento b asico em Fortran; a tarefa da programa c~ao n~ao estava mais restrita a um corpus pequeno de programadores especialistas.

O Fortran disseminou-se rapidamente, principalmente nas areas da f sica, engenharia e matem atica, uma vez que satisfazia uma necessidade premente dos cientistas. Inevitavelmente, dialetos da linguagem foram desenvolvidos, os quais levaram a problemas quando havia necessidade de se trocar programas entre diferentes computadores. O dialeto de Fortran otimizado para processadores fabricados pela IBM, por exemplo, geralmente gerava erro quando se tentava rodar o mesmo programa em um processador Burroughs, ou em outro qualquer. Assim, em 1966, ap os quatro anos de trabalho, a Associa c~ao Americana de Padr~oes (American Standards Association), posteriormente Instituto Americano Nacional de Padr~oes (American National Standards Institute, ou ANSI) originou o primeiro padr~ao para uma linguagem de programa c~ao, agora conhecido como Fortran 6. Essencialmente, era uma subconjunto comum de v arios dialetos, de tal forma que cada dialeto poderia

1Do ingles: Central Processing Unit.

ser reconhecido como uma extens~ao do padr~ao. Aqueles usu arios que desejavam escrever programas portaveis deveriam evitar as extens~oes e restringir-se ao padr~ao.

O Fortran trouxe consigo v arios outros avan cos, al em de sua facilidade de aprendizagem combinada com um enfoque em execu c~ao e ciente de c odigo. Era, por exemplo, uma linguagem que permanecia pr oxima (e explorava) o hardware dispon vel, ao inv es de ser um conjunto de conceitos abstratos. Ela tamb em introduziu, atrav es das declara c~oes COMMON e EQUIVALENCE, a possibilidade dos programadores controlarem a aloca c~ao da armazenagem de dados de uma forma simples, um recurso que era necess ario nos prim ordios da computa c~ao, quando havia pouco espa co de mem oria, mesmo que estas declara c~oes sejam agora consideradas potencialmente perigosas e o seu uso desencorajado. Finalmente, o c odigo fonte permitia espa cos em branco na sua sintaxe, liberando o programador da tarefa de escrever c odigo em colunas rigidamente de nidas e permitindo que o corpo do programa fosse escrito da forma desejada e visualmente mais atrativa.

A prolifera c~ao de dialetos permaneceu um problema mesmo ap os a publica c~ao do padr~ao Fortran 6. A primeira di culdade foi que muitos compiladores n~ao aderiram ao padr~ao. A segunda foi a implementa c~ao, em diversos compiladores, de recursos que eram essenciais para programas de grande escala, mas que eram ignorados pelo padr~ao. Diferentes compiladores implementavam estes recursos de formas distintas.

Esta situa c~ao, combinada com a existencia de falhas evidentes na linguagem, tais como a falta de constru c~oes estruturadas de programa c~ao, resultaram na introdu c~ao de um grande n umero de pre-processadores. Estes eram programas que eram capazes de ler o c odigo fonte de algum dialeto bem de nido de Fortran e gerar um segundo arquivo com o texto no padr~ao, o qual ent~ao era apresentado ao compilador nesta forma. Este recurso provia uma maneira de estender o Fortran, ao mesmo tempo retendo a sua portabilidade. O problema era que embora os programas gerados com o uso de um pr e-processador fossem port aveis, podendo ser compilados em diferentes computadores, o c odigo gerado era muitas vezes de uma di culdade proibitiva para a leitura direta.

Estas di culdades foram parcialmente removidas pela publica c~ao de um novo padr~ao, em 1978, conhecido como Fortran 7. Ele inclu a diversos novos recursos que eram baseados em extens~oes comerciais ou pr eprocessadores e era, portanto, n~ao um subconjunto comum de dialetos existentes, mas sim um novo dialeto por si s o. O per odo de transi c~ao entre o Fortran 6 e o Fortran 7 foi muito mais longo que deveria, devido aos atrasos na elabora c~ao de novas vers~oes dos compiladores e os dois padr~oes coexistiram durante um intervalo de tempo consider avel, que se estendeu at e meados da d ecada de 80. Eventualmente, os fabricantes de compiladores passaram a liber a-los somente com o novo padr~ao, o que n~ao impediu o uso de programas escritos em Fortran 6, uma vez que o Fortran 7 permitia este c odigo antigo por compatibilidade. Contudo, diversas extens~oes n~ao foram mais permitidas, uma vez que o padr~ao n~ao as incluiu na sua sintaxe.

1.2 O padr~ao Fortran 90

Ap os trinta anos de existencia, Fortran n~ao mais era a unica linguagem de programa c~ao dispon vel para os programadores. Ao longo do tempo, novas linguagens foram desenvolvidas e, onde elas se mostraram mais adequadas para um tipo particular de aplica c~ao, foram adotadas em seu lugar. A superioridade do Fortran sempre esteve na area de aplica c~oes num ericas, cient cas, t ecnicas e de engenharia. A comunidade de usu arios do Fortran realizou um investimento gigantesco em c odigos, com muitos programas em uso freq uente, alguns com centenas de milhares ou milh~oes de linhas de c odigo. Isto n~ao signi cava, contudo, que a comunidade es- tivesse completamente satisfeita com a linguagem. V arios programadores passaram a migrar seus c odigos para linguagens tais como Pascal, C e C++. Para levar a cabo mais uma moderniza c~ao da linguagem, o comite t ecnico X3J3, aprovado pela ANSI, trabalhando como o corpo de desenvolvimento do comite da ISO (International Standards Organization, Organiza c~ao Internacional de Padr~oes) ISO/IEC JTC1/SC22/WG5 (doravante conhecido como WG5), preparou um novo padr~ao, inicialmente conhecido como Fortran 8x, e agora como Fortran 90.

Quais eram as justi cativas para continuar com o processo de revis~ao do padr~ao da linguagem Fortran? Al em de padronizar extens~oes comerciais, havia a necessidade de moderniza c~ao, em resposta aos desenvolvimentos nos conceitos de linguagens de programa c~ao que eram explorados em outras linguagens tais como APL, Algol, Pascal, Ada, C e C++. Com base nestas, o X3J3 podia usar os obvios benef cios de conceitos tais como ocultamento de dados. Na mesma linha, havia a necessidade de fornecer uma alternativa a perigosa associa c~ao de armazenagem de dados, de abolir a rigidez agora desnecess aria do formato xo de fonte, bem como de aumentar a seguran ca na programa c~ao. Para proteger o investimento em Fortran 7, todo o padr~ao anterior foi mantido como um subconjunto do Fortran 90.

Contudo, de forma distinta dos padr~oes pr evios, os quais resultaram quase inteiramente de um esfor co de padronizar pr aticas existentes, o Fortran 90 e muito mais um desenvolvimento da linguagem, na qual s~ao introduzidos recursos que s~ao novos em Fortran, mas baseados em experiencias em outras linguagens. Os recursos novos mais signi cativos s~ao a habilidade de manipular matrizes usando uma nota c~ao concisa mais poderosa e a

Autor: Rudi Gaelzer { IFM/UFPel Impresso: 24 de fevereiro de 2009 habilidade de de nir e manipular tipos de dados de nidos pelo programador. O primeiro destes recursos leva a uma simpli ca c~ao na escrita de muitos problemas matem aticos e tamb em torna o Fortran uma linguagem mais e ciente em supercomputadores. O segundo possibilita aos programadores a express~ao de seus problemas em termos de tipos de dados que reproduzem exatamente os conceitos utilizados nas sua elabora c~oes.

1.2.1 Recursos novos do Fortran 90 Um resumo dos novos recursos e dado a seguir:

O Fortran 90 possui uma maneira para rotular alguns recursos antigos como em obsolescencia (isto e, tornando-se obsoletos).

Recursos avan cados para computa c~ao num erica usando um conjunto de fun c~oes inquisidoras num ericas.

Parametriza c~ao dos tipos intr nsecos, permitindo o suporte a inteiros curtos, conjuntos de caracteres muito grandes, mais de duas precis~oes para vari aveis reais e complexas e vari aveis l ogicas agrupadas.

Tipos de dados derivados, de nidos pelo programador, compostos por estruturas de dados arbitr arias e de opera c~oes sobre estas estruturas.

Facilidades na de ni c~ao de coletaneas denominadas modulos, uteis para de ni c~oes globais de dados e para bibliotecas de subprogramas.

Exigencia que o compilador detecte o uso de constru c~oes que n~ao se conformam com a linguagem ou que estejam em obsolescencia.

Um novo formato de fonte, adequado para usar em um terminal.

Novas estruturas de controle, tais como SELECT CASE e uma nova forma para os la cos DO.

A habilidade de escrever subprogramas internos e subprogramas recursivos e de chamar subprogramas com argumentos opcionais.

Aloca c~ao dinamica de dados (matrizes autom aticas, matrizes aloc aveis e ponteiros).

Melhoramentos nos recursos de entrada/sa da de dados.

Todos juntos, estes novos recursos contidos em Fortran 90 ir~ao assegurar que o padr~ao continue a ser bem sucedido e usado por um longo tempo. O Fortran 7 continua sendo suportado como um subconjunto durante um per odo de adapta c~ao.

Os procedimentos de trabalho adotados pelo comite X3J3 estabelecem um per odo de aviso pr evio antes que qualquer recurso existente seja removido da linguagem. Isto implica, na pr atica, um ciclo de revis~ao, que para o Fortran e de cerca de cinco anos. A necessidade de remo c~ao de alguns recursos e evidente; se a unica a c~ao adotada pelo X3J3 fosse de adicionar novos recursos, a linguagem se tornaria grotescamente ampla, com muitos tens redundantes e sobrepostos. A solu c~ao nalmente adotada pelo comite foi de publicar como uma apendice ao padr~ao um conjunto de duas listas mostrando quais os tens que foram removidos e quais s~ao os candidatos para uma eventual remo c~ao.

A primeira lista cont em os recursos removidos (deleted features). A segunda lista cont em os recursos em obsolescencia (obsolescent features), os quais s~ao considerados obsoletos e redundantes, sendo assim candidatos a remo c~ao na pr oxima revis~ao da linguagem.

1.2.2 Recursos em obsolescencia do Fortran 90 Os recursos em obsolescencia do Fortran 90 s~ao:

desvio para uma declara c~ao END IF a partir de um ponto fora de seu bloco;

Autor: Rudi Gaelzer { IFM/UFPel Impresso: 24 de fevereiro de 2009

vari aveis reais e de dupla precis~ao nas express~oes de controle de um comando DO;

naliza c~ao compartilhada de blocos DO, bem como naliza c~ao por uma declara c~ao ou comando distintos de um CONTINUE ou de um END DO;

1.2.3 Recursos removidos do Fortran 90

Uma vez que Fortran 90 cont em o Fortran 7 como subconjunto, esta lista permaneceu vazia para o Fortran 90.

1.3 Uma revis~ao menor: Fortran 95

Seguindo a publica c~ao do padr~ao Fortran 90 em 1991, dois signi cativos desenvolvimentos posteriores referentes a linguagem Fortran ocorreram. O primeiro foi a continuidade na opera c~ao dos dois comites de regulamenta c~ao do padr~ao da linguagem: o X3J3 e o WG5; o segundo desenvolvimento foi a cria c~ao do F orum Fortran de Alta Performance (High Performance Fortran Forum, ou HPFF).

(Parte 1 de 7)

Comentários