unicamp - fortran 90

Download UNICAMP - Fortran 90

Post on 19-Jul-2015

87 views

Category:

Documents

5 download

Embed Size (px)

TRANSCRIPT

Apostila de Treinamento: Introduo ao Fortran90 Reviso: 2012 Universidade Estadual de Campinas Centro Nacional de Processamento de Alto Desempenho So Paulo 2 NDICE 1-INTRODUO05 1.1-Histria05 1.2-Fortran 7706 1.3-Fortran 9007 1.4-Exemplo de Programa08 2-ELEMENTOS DO FORTRAN 9009 2.1-Caractersticas de Codificao09 2.2-Regras de Codificao10 2.3-Compilao no Ambiente CENAPAD-SP11 EXERCCIO 1-Compilao e Execuo12 EXERCCIO 2-Reestruturao de programa13 2.4-Estrutura e Organizao de Programas14 2.5-Tipo de Dado15 2.6-Constantes16 2.7-Tipo de Dado Implcito16 2.8-Declarao de Variveis17 2.9-Declarao de Constantes19 2.10-Inicializao de Variveis20EXERCCIO 3-Erro na Declarao de Variveis21 EXERCCIO 4-Declarao de Variveis21 2.11-Expresses22 2.11.1-Operador de Atribuio ( = )22 2.11.2-Operadores Numricos23 2.11.3-Precedncia de Operadores23 2.11.4-Operadores Relacionais24 2.11.5-Operadores Lgicos 24 2.11.6-Vetor string e Operador Caractere ( // )25 EXERCCIO 5-Expresses26 3-COMANDOS DE CONTROLE DO FLUXO DA EXECUO27 3.1-Comando IF28 3.2-Comando IF...THEN...END IF29 3.3-Comando IF...THEN...ELSE...END IF30 3.4-Comando IF...THEN...ELSEIF...END IF31 3.5-Comando IF...THEN...ELSEIF...END IF Identificado33 EXERCCIO 6-Comando IF34 3.6-Comando de LOOP Condicional DO-EXIT-END DO35 3.7-Comando de LOOP Cclico Condicional DO-CYCLE-EXIT-END DO 35 3.8-LOOPs Identificados36 3.9-Comando DO-WHILE36 3.10-Comando DO iterativo37 3.11-Comando SELECT CASE-CASE-END SELECT 38 3.12-Operaes entre Tipos de Dados39 3.13-Diviso por Inteiros39 3.14-Procedimentos Internos do Fortran9040 3.15-Comando PRINT41 3.16-Comando READ41 EXERCCIO 7-DO42 EXERCCIO 8-SELECT CASE42 EXERCCIO 9-Funes Matemticas43 4-CONJUNTO DE DADOS44 4.1-Declarao de Conjunto de Dados45 4.2-Visualizao de um Conjunto de Dados46 4.3-Organizao do Conjunto de Dados47 4.4-Sintaxe de um Conjunto de Dados48 4.5-Leitura e Impresso dos Elementos de um Conjunto de Dados 49 4.6-Funes de Tratamento de Conjunto de Dados50 4.7-Alocao Dinmica de Conjunto de Dados52 EXERCCIO 10-Definio de Conjunto de Dados53 EXERCCIO 11-Funes de Caractersticas de um Conjunto de Dados54 EXERCCIO 12-Funes de Operaes de um Conjunto de Dados54 EXERCCIO 13-Uso de um Conjunto de Dados55 3 5-SEES AUXILIARES DE PROGRAMASFORTRAN56 5.1-Sees Auxiliares56 5.2-Procedimentos: Funes e Subrotinas58 5.2.1-Procedimento SUBROUTINE59 5.2.2-Procedimento FUNCTION60 5.2.3-Detalhes de Procedimentos61 EXERCCIO 14-Subrotina64 EXERCCIO 15-Funo64 6-TRATAMENTO DE ARQUIVOS65 6.1-ENTRADA / SADA66 6.2-Comando OPEN66 6.3-Comando READ68 6.4-Comando WRITE70 6.5-loops Inseridos nos Comandos READ/WRITE72 6.6-Descritores de Edio73 6.7-Formatao de Dados (FORMAT/FMT=)74 6.8-Outros comandos de I/O76 7-COMANDOS DE EXCEO77 7.1-Comando GOTO77 7.2-Comando RETURN77 7.3-Comando STOP77 8-RECOMENDAES DE CODIFICAO78 EXERCCIO 19-I/O79 EXERCCIO 20-I/O79 EXERCCIO 21-Formatao79 REFERNCIAS80 4 Tipografia utilizada na apostila Na apresentao de alguns comandos do Fortran, foram utilizados smbolos grficos que identificam, na sintaxe do comando, a caracterstica de ser opcional ou obrigatrio: < caracterstica > obrigatrio a informao no comando; [ caracterstica ] opcional a informao no comando. Exemplo: Utilizao do comando IF/THEN/ELSE/ENDIF IF THEN ... [ELSE ...] END IF 1.A expresso lgica do IF obrigatria; 2.O bloco de comandos aps o comando THEN, obrigatrio; 3.O comando ELSE opcional, mas se for utilizado, o bloco de comandos aps o ELSE, passa a ser obrigatrio. IF( X = 0 ) THEN PRINT *, X=0 X=X+1 Y=10**X ELSE PRINT *, X diferente de 0 Y=10**X END IF 5 1 INTRODUO 1.1 Histria FORmula TRANslation System; Primeira linguagem considerada de alto nvel (High Level prxima a linguagem humana), desenvolvida por John Backus, naIBM, em 1954, ecomercializadaem 1957. Continuasendo muito utilizadanos dias dehojenas reas de programao cientifica e aplicaes matemticas. O Fortran, inicialmente, era um interpretador de cdigo digital para o computador IBM 701, sendo originalmente chamado de Speedcoding. Aprimeirageraodecdigosparaprogramaodecomputadores,eradesignadadelinguagemdemquinaou cdigo de mquina, que na verdade, a nica linguagem que o computador interpreta. So instrues codificadas em seqncias de 0s e 1s (Seqncia binria). A segunda gerao de cdigos foi chamada de linguagem Assembly (montagem). Esta linguagem torna a seqncia de0se1sempalavrascompreensveis,comoADD,STORE,LOAD.Naverdade,estalinguagemtraduzida para cdigo de mquina por programas chamados Assemblers (montadoras). A terceira gerao de cdigos foi chamada de High level language ou HLL, na qual existem palavras e sintaxe de acordocomalinguagemhumana(comopalavrasemumasentena).ParaqueumcomputadorentendaumaHLL, necessrio um compilador que traduza o cdigo para Assembly ou para cdigo de mquina. JohnBackuschefiouaequipedepesquisadores daIBMqueinventou o Fortran, no Watson Scientific Laboratory NY. Esta equipe no inventou a idia de HLL ou a idia de compilar uma linguagem para cdigo de mquina, mas o Fortran foi uma das primeiras HLL. OFortranestcommaisde40anos,sendoconstantementemodificadoeatualizado,esemantmnotopodas linguagens para computadores nas reas de programao cientfica e industrial. Fortran I(1954-1957) O compilador Fortran I manteve o recorde de traduzir um cdigo, por mais de 20 anos. Fortran II (1958) Capacidade de compilar mdulos de programas, no executveis, para serem link editados com outros programas. Fortran III (1958) - No saiu do laboratrio. Fortran IV (1961) ou Fortran66 (1966) ImplementaodoscomandosCOMMONeEQUIVALENCE,quepermitiramocompartilhamentodecdigoentre outros programas e sub-rotinas. Foi o primeiro compilador oficialmente padronizado. Fortran77 (1977) Foi padronizado utilizando o conceito de programao estruturada. Padro: ANSI X3 e ISO/IECJTC1/SC22/WG5 Fortran90 (1980) AtualizaodoFortran77quelevou12anosparaserefetuada.VriosrecursosdoFortran90seaproximamaos existentes na linguagem C (Alocao dinmica de memria, apontadores e orientao ao objeto). HPF (1990) - High Performance Fortran Fortran90 para ambientes com memria distribuda; Fortran95 (1995) 6 1.2 Fortran77 Algumas necessidades em programao, definiram o Fortran77 como uma linguagem obsoleta em relao s linguagens atuais: Formato fixo: -Linhas de instrues, comeavam na posio 7 e iam at a 72;-Somente letras maisculas; -Nomes de variveis, at 6 caracteres. Impossibilidade de determinar operaes paralelas; umasituaocrtica,poisoFortranconsideradocomumalinguagemdealta performance, no entanto, at o padro 77 no existia nenhuma instruo que permitisse ao usuriodefinirregiesdoprogramaquepudessemexecutaremparalelo,utilizandoos recursos de mais de um processador, como por exemplo, o compartilhamento de endereos de memria. No possvel a alocao dinmica de memria; No Fortran77, o programador obrigado a declarar vetores com o maior tamanho possvel para reservar memria durante a compilao, ou seja, no era possvel utilizar conjuntos de dados temporrios durante a execuo. No possui representao numrica portvel; DiversosambientescomputacionaiscriaramextensesdoFotran77paramelhorara precisonumricaemsuasarquiteturas,oquetornava o cdigo no portvel para outra arquitetura.NoFortran90,os diversos recursos de preciso numrica foram padronizados, melhorando a portabilidade. No era possvel definir uma nova estrutura de dados pelo usurio. No possui recurso explcita; No era possvel chamar uma funo dentro de outra funo. No havia recurso! 7 1.3 Fortran90 Formato livre: -132 caracteres por linha; -Maisculas e minsculas; -Nomes at 31 caracteres; -Mais de um comando por linha. Novas instrues que permitem execues de partes do programa em paralelo. -PARALLEL DO (Definio de loops paralelos); -PARALLEL SECTION; -Operaes de ARRAYS em paralelo (SUM, MAX, etc). O ARRAY dividido em diversos vetores, para ser distribudo por entre diversos processos. Novasinstruesquepermitemaalocaodinmicadememria(ALLOCATABLE,ALLOCATE); Possibilidade de definio de novas estruturas de dados (Comando de declarao TYPE); TYPE COORDS_3D REAL :: x, y, z END TYPE COORDS_3D TYPE(COORDS_3D) :: pt1, pt2 Maior flexibilidade e portabilidade na definio da preciso numrica de uma varivel (Parmetro KIND); INTEGER xFORTRAN IBM Preciso de 4 bytes FORTRAN CRAY Preciso de 8 bytes INTEGER(KIND=4)x Recursividade de funes e rotinas; Estruturas de controle: -DO...ENDDO -DOWHILE -SELECT CASE -EXIT -CYCLE -IFTHENELSEENDIF Nova orientao - Desligar a definio automtica de variveis como reais ou inteiras. -IMPLICIT NONE 8 1.4 Exemplo de Programa Fortran90 PROGRAM Triangulo IMPLICIT NONE REAL :: a, b, c, Area PRINT *, 'Entre com os valores de comprimento& &dos 3 lados do tringulo.' READ *, a, b, c PRINT *, 'Area do tringulo: ', Area(a,b,c) CONTAINS FUNCTION Area(x,y,z) REAL :: Area ! Tipo da funo REAL, INTENT( IN ) :: x, y, z REAL :: theta, height theta = acos((x**2+y**2-z**2)/(2.0*x*y)) height = x*sin(theta); Area = 0.5*y*height END FUNCTION Area END PROGRAM Triangulo Possui a estrutura principal de programao FORTRAN: PROGRAM; Uma estrutura auxiliar: FUNCTION, definida dentro da estrutura principal PROGRAM; Comando de declarao REAL especifica as variveis reais do programa; Comando de execuo PRINT Imprime os resultados de variveis em uma determinada sada; ComandodeexecuoREADLvaloresdeumadeterminadaentradaeosatribuisvariveis especificadas; Comandosdeatribuio(=)Definenovasvariveiscomosendooresultadodeexpresses lgicas e aritmticas; 9 2 ELEMENTOS DO FORTRAN90 2.1 Caractersticas de Codificao OFortran90suportaoformatolivre(FREEFORM)decodificaoemrelaoaoformatofixo (FIXEDFORM)doFortran77,oquefacilitouaprogramaoemFortran.Dequalquerforma,o Fortran90 aceita todas as caractersticas e sintaxes do Fortran77. As principais caractersticas so: 132 caracteres por linha; Alfanumrico: a-z, A-Z, 0-9, _ Os comandos e nomes de variveis podem utilizar letras maisculas ou minsculas, misturadas ou no; ! Carac

Recommended

View more >