daniel ruschel dutrarns/astroprog/f90_daniel.pdf · open(50,file=’meuarquivo.dat’) formato uma...

49
Fortran 90 e suas aplicac ¸˜ oes astron ˆ omicas Daniel Ruschel Dutra UFRGS 21 de maio de 2010 Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 1 / 16

Upload: others

Post on 24-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Fortran 90 e suas aplicacoes astronomicas

Daniel Ruschel Dutra

UFRGS

21 de maio de 2010

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 1 / 16

Page 2: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Visao geral do Fortran 90

Linguagem de baixo nıvel

Facil aprendizagemFacilidade para trabalhar com vetores e matrizesRelativamente rapido para calculos numericos

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 2 / 16

Page 3: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Visao geral do Fortran 90

Linguagem de baixo nıvelFacil aprendizagem

Facilidade para trabalhar com vetores e matrizesRelativamente rapido para calculos numericos

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 2 / 16

Page 4: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Visao geral do Fortran 90

Linguagem de baixo nıvelFacil aprendizagemFacilidade para trabalhar com vetores e matrizes

Relativamente rapido para calculos numericos

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 2 / 16

Page 5: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Visao geral do Fortran 90

Linguagem de baixo nıvelFacil aprendizagemFacilidade para trabalhar com vetores e matrizesRelativamente rapido para calculos numericos

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 2 / 16

Page 6: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Conceitos gerais

Formato quase livre, 132 caracteres por linha

Para continuar uma linha basta colocar um ”&”no finalEx:Lorem ipsum dolor sit amet, consectetur&adipisicing elit, sed do eiusmod tempor incididunt”!”denota um comentario, pode estar no meio de uma linhaOs rotulos, comuns no 77, sao desnecessariosVarios comandos podem ser colocados em uma mesma linhaEx: DO i=1,10; WRITE(*,*) vec(i); ENDDO

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 3 / 16

Page 7: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Conceitos gerais

Formato quase livre, 132 caracteres por linhaPara continuar uma linha basta colocar um ”&”no finalEx:Lorem ipsum dolor sit amet, consectetur&adipisicing elit, sed do eiusmod tempor incididunt

”!”denota um comentario, pode estar no meio de uma linhaOs rotulos, comuns no 77, sao desnecessariosVarios comandos podem ser colocados em uma mesma linhaEx: DO i=1,10; WRITE(*,*) vec(i); ENDDO

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 3 / 16

Page 8: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Conceitos gerais

Formato quase livre, 132 caracteres por linhaPara continuar uma linha basta colocar um ”&”no finalEx:Lorem ipsum dolor sit amet, consectetur&adipisicing elit, sed do eiusmod tempor incididunt”!”denota um comentario, pode estar no meio de uma linha

Os rotulos, comuns no 77, sao desnecessariosVarios comandos podem ser colocados em uma mesma linhaEx: DO i=1,10; WRITE(*,*) vec(i); ENDDO

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 3 / 16

Page 9: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Conceitos gerais

Formato quase livre, 132 caracteres por linhaPara continuar uma linha basta colocar um ”&”no finalEx:Lorem ipsum dolor sit amet, consectetur&adipisicing elit, sed do eiusmod tempor incididunt”!”denota um comentario, pode estar no meio de uma linhaOs rotulos, comuns no 77, sao desnecessarios

Varios comandos podem ser colocados em uma mesma linhaEx: DO i=1,10; WRITE(*,*) vec(i); ENDDO

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 3 / 16

Page 10: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Conceitos gerais

Formato quase livre, 132 caracteres por linhaPara continuar uma linha basta colocar um ”&”no finalEx:Lorem ipsum dolor sit amet, consectetur&adipisicing elit, sed do eiusmod tempor incididunt”!”denota um comentario, pode estar no meio de uma linhaOs rotulos, comuns no 77, sao desnecessariosVarios comandos podem ser colocados em uma mesma linhaEx: DO i=1,10; WRITE(*,*) vec(i); ENDDO

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 3 / 16

Page 11: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Buenas, mundo!

PROGRAM buenasWRITE(*,*)’Buenas, mundo!’END PROGRAM buenas

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 4 / 16

Page 12: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Declaracao de variaveis

EstruturaPROGRAM nome do programatipo 1 :: variavel 1,variavel 2(dimensoes)tipo 2 :: variavel 3comandosEND PROGRAM

Tipos de variaveisTipo Extensao Exemplo

integer ±2bits/2 -25643character > 107 caracteres ivoviuauva

logical .true. , .false. .true.

real ate 15 decimais e10200 3.14159274101257324E+157

complex dois reais ( 5.0000000 , 6.0000000 )

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 5 / 16

Page 13: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Declaracao de variaveis

EstruturaPROGRAM nome do programatipo 1 :: variavel 1,variavel 2(dimensoes)tipo 2 :: variavel 3comandosEND PROGRAM

Tipos de variaveisTipo Extensao Exemplo

integer ±2bits/2 -25643character > 107 caracteres ivoviuauva

logical .true. , .false. .true.

real ate 15 decimais e10200 3.14159274101257324E+157

complex dois reais ( 5.0000000 , 6.0000000 )

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 5 / 16

Page 14: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

READ e WRITE

WRITE( 50 , ’(3f9.3)’ ) vetor

Unidade Logica

FormatoVariavel

Unidade LogicaA maneira como o fortran opera arquivos:OPEN(50,file=’meuarquivo.dat’)

FormatoUma string que define a forma de ler ou escrever.’(3f9.3)’→ 3 floats de 9 dıgitos, com 3 decimais

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 6 / 16

Page 15: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

READ e WRITE

WRITE( 50 , ’(3f9.3)’ ) vetor

Unidade LogicaFormato

Variavel

Unidade LogicaA maneira como o fortran opera arquivos:OPEN(50,file=’meuarquivo.dat’)

FormatoUma string que define a forma de ler ou escrever.’(3f9.3)’→ 3 floats de 9 dıgitos, com 3 decimais

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 6 / 16

Page 16: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

READ e WRITE

WRITE( 50 , ’(3f9.3)’ ) vetor

Unidade LogicaFormatoVariavel

Unidade LogicaA maneira como o fortran opera arquivos:OPEN(50,file=’meuarquivo.dat’)

FormatoUma string que define a forma de ler ou escrever.’(3f9.3)’→ 3 floats de 9 dıgitos, com 3 decimais

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 6 / 16

Page 17: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

READ e WRITE

WRITE( 50 , ’(3f9.3)’ ) vetor

Unidade LogicaFormatoVariavel

Unidade LogicaA maneira como o fortran opera arquivos:OPEN(50,file=’meuarquivo.dat’)

FormatoUma string que define a forma de ler ou escrever.’(3f9.3)’→ 3 floats de 9 dıgitos, com 3 decimais

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 6 / 16

Page 18: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

READ e WRITE

WRITE( 50 , ’(3f9.3)’ ) vetor

Unidade LogicaFormatoVariavel

Unidade LogicaA maneira como o fortran opera arquivos:OPEN(50,file=’meuarquivo.dat’)

FormatoUma string que define a forma de ler ou escrever.’(3f9.3)’→ 3 floats de 9 dıgitos, com 3 decimais

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 6 / 16

Page 19: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

READ e WRITE

WRITE( 50 , ’(3f9.3)’ ) vetor

Unidade LogicaFormatoVariavel

Unidade LogicaA maneira como o fortran opera arquivos:OPEN(50,file=’meuarquivo.dat’)

FormatoUma string que define a forma de ler ou escrever.’(3f9.3)’→ 3 floats de 9 dıgitos, com 3 decimais

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 6 / 16

Page 20: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Condicional

Relacoes

Matematica < 6 = 6= > >Fortran 90 < <= == /= >= >Fortran 77 .lt. .le. .eq. .ne. .ge. .gt.

Exemplo 1IF(flux < 0) flux=0

Exemplo 2IF(lambda == lambda0)THENALLOCATE(spectro(lambda:lambda f))READ(10,*)spectroENDIF

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 7 / 16

Page 21: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Condicional

Relacoes

Matematica < 6 = 6= > >Fortran 90 < <= == /= >= >Fortran 77 .lt. .le. .eq. .ne. .ge. .gt.

Exemplo 1IF(flux < 0) flux=0

Exemplo 2IF(lambda == lambda0)THENALLOCATE(spectro(lambda:lambda f))READ(10,*)spectroENDIF

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 7 / 16

Page 22: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Condicional

Relacoes

Matematica < 6 = 6= > >Fortran 90 < <= == /= >= >Fortran 77 .lt. .le. .eq. .ne. .ge. .gt.

Exemplo 1IF(flux < 0) flux=0

Exemplo 2IF(lambda == lambda0)THENALLOCATE(spectro(lambda:lambda f))READ(10,*)spectroENDIF

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 7 / 16

Page 23: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Condicional

Exemplo 3IF(x/2 = int(x/2))THENWRITE(*,*)’x e par’ELSEWRITE(*,*)’x e ımpar’ENDIF

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 8 / 16

Page 24: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Loops

Loop contadoDO n=1,10,2WRITE(*,*) n/2 → 0 1 2 3 4ENDDO

Loop indefinidoDOREAD(50,*,iostat=stat)xIF(stat /= 0)EXITn=n+1ENDDO

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 9 / 16

Page 25: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Loops

Loop contadoDO n=1,10,2WRITE(*,*) n/2 → 0 1 2 3 4ENDDO

Loop indefinidoDOREAD(50,*,iostat=stat)xIF(stat /= 0)EXITn=n+1ENDDO

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 9 / 16

Page 26: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays

DeclaracaoINTEGER :: matriz(5,5)

INTEGER, DIMENSION(10) :: matriz 1, matriz 2, matriz 3REAL, ALLOCATABLE :: matriz(:,:),vetor(:)...ALLOCATE(matriz(colunas,linhas))...ALLOCATE(vetor(dimensoes))Os ındices sao arbitrarios desde que inteirosREAL :: espectro(4500:8000)

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 10 / 16

Page 27: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays

DeclaracaoINTEGER :: matriz(5,5)INTEGER, DIMENSION(10) :: matriz 1, matriz 2, matriz 3

REAL, ALLOCATABLE :: matriz(:,:),vetor(:)...ALLOCATE(matriz(colunas,linhas))...ALLOCATE(vetor(dimensoes))Os ındices sao arbitrarios desde que inteirosREAL :: espectro(4500:8000)

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 10 / 16

Page 28: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays

DeclaracaoINTEGER :: matriz(5,5)INTEGER, DIMENSION(10) :: matriz 1, matriz 2, matriz 3REAL, ALLOCATABLE :: matriz(:,:),vetor(:)...ALLOCATE(matriz(colunas,linhas))...ALLOCATE(vetor(dimensoes))

Os ındices sao arbitrarios desde que inteirosREAL :: espectro(4500:8000)

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 10 / 16

Page 29: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays

DeclaracaoINTEGER :: matriz(5,5)INTEGER, DIMENSION(10) :: matriz 1, matriz 2, matriz 3REAL, ALLOCATABLE :: matriz(:,:),vetor(:)...ALLOCATE(matriz(colunas,linhas))...ALLOCATE(vetor(dimensoes))Os ındices sao arbitrarios desde que inteirosREAL :: espectro(4500:8000)

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 10 / 16

Page 30: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays - Operando

AritmeticaDefinindo um vetor constante: vetor=(/ 1,2,3,4,5 /)

Soma e subtracao como escalaresc=a+b→ c(n)=a(n)+b(n)Produto escalar entre cada um dos elementosc=a*b→ c(n)=a(n)*b(n)Operacoes entre vetores e escalares tambem valemc=a*d→ c(n)=a(n)*d

Como diria o Jack Estripador...

E possıvel operar sobre uma secao de um vetorc(10:20)=c(10:20)*fatorou toda uma linha de uma matrizmatriz(2,:)=matriz(2,:)*fator

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 11 / 16

Page 31: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays - Operando

AritmeticaDefinindo um vetor constante: vetor=(/ 1,2,3,4,5 /)Soma e subtracao como escalaresc=a+b→ c(n)=a(n)+b(n)

Produto escalar entre cada um dos elementosc=a*b→ c(n)=a(n)*b(n)Operacoes entre vetores e escalares tambem valemc=a*d→ c(n)=a(n)*d

Como diria o Jack Estripador...

E possıvel operar sobre uma secao de um vetorc(10:20)=c(10:20)*fatorou toda uma linha de uma matrizmatriz(2,:)=matriz(2,:)*fator

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 11 / 16

Page 32: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays - Operando

AritmeticaDefinindo um vetor constante: vetor=(/ 1,2,3,4,5 /)Soma e subtracao como escalaresc=a+b→ c(n)=a(n)+b(n)Produto escalar entre cada um dos elementosc=a*b→ c(n)=a(n)*b(n)

Operacoes entre vetores e escalares tambem valemc=a*d→ c(n)=a(n)*d

Como diria o Jack Estripador...

E possıvel operar sobre uma secao de um vetorc(10:20)=c(10:20)*fatorou toda uma linha de uma matrizmatriz(2,:)=matriz(2,:)*fator

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 11 / 16

Page 33: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays - Operando

AritmeticaDefinindo um vetor constante: vetor=(/ 1,2,3,4,5 /)Soma e subtracao como escalaresc=a+b→ c(n)=a(n)+b(n)Produto escalar entre cada um dos elementosc=a*b→ c(n)=a(n)*b(n)Operacoes entre vetores e escalares tambem valemc=a*d→ c(n)=a(n)*d

Como diria o Jack Estripador...

E possıvel operar sobre uma secao de um vetorc(10:20)=c(10:20)*fatorou toda uma linha de uma matrizmatriz(2,:)=matriz(2,:)*fator

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 11 / 16

Page 34: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays - Operando

AritmeticaDefinindo um vetor constante: vetor=(/ 1,2,3,4,5 /)Soma e subtracao como escalaresc=a+b→ c(n)=a(n)+b(n)Produto escalar entre cada um dos elementosc=a*b→ c(n)=a(n)*b(n)Operacoes entre vetores e escalares tambem valemc=a*d→ c(n)=a(n)*d

Como diria o Jack Estripador...

E possıvel operar sobre uma secao de um vetorc(10:20)=c(10:20)*fatorou toda uma linha de uma matrizmatriz(2,:)=matriz(2,:)*fator

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 11 / 16

Page 35: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays - Operando

AritmeticaDefinindo um vetor constante: vetor=(/ 1,2,3,4,5 /)Soma e subtracao como escalaresc=a+b→ c(n)=a(n)+b(n)Produto escalar entre cada um dos elementosc=a*b→ c(n)=a(n)*b(n)Operacoes entre vetores e escalares tambem valemc=a*d→ c(n)=a(n)*d

Como diria o Jack Estripador...

E possıvel operar sobre uma secao de um vetorc(10:20)=c(10:20)*fator

ou toda uma linha de uma matrizmatriz(2,:)=matriz(2,:)*fator

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 11 / 16

Page 36: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays - Operando

AritmeticaDefinindo um vetor constante: vetor=(/ 1,2,3,4,5 /)Soma e subtracao como escalaresc=a+b→ c(n)=a(n)+b(n)Produto escalar entre cada um dos elementosc=a*b→ c(n)=a(n)*b(n)Operacoes entre vetores e escalares tambem valemc=a*d→ c(n)=a(n)*d

Como diria o Jack Estripador...

E possıvel operar sobre uma secao de um vetorc(10:20)=c(10:20)*fatorou toda uma linha de uma matrizmatriz(2,:)=matriz(2,:)*fator

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 11 / 16

Page 37: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays - Lendo

Jeito direto: exige uniformidade12000.0 .213246E-1212001.0 .213368E-1212002.0 .213490E-1212003.0 .213611E-12

...

READ(unity,’(8x,1e11.6)’) espectro

mas nao muitoREAD(unity,*)lixo(:,:)

Atraves de loop: mais controleDO i=inicio,fim,passoREAD(unity,format) lambda(i),fluxo(i)ENDDO

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 12 / 16

Page 38: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays - Lendo

Jeito direto: exige uniformidade12000.0 .213246E-1212001.0 .213368E-1212002.0 .213490E-1212003.0 .213611E-12

...

READ(unity,’(8x,1e11.6)’) espectro

mas nao muitoREAD(unity,*)lixo(:,:)

Atraves de loop: mais controleDO i=inicio,fim,passoREAD(unity,format) lambda(i),fluxo(i)ENDDO

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 12 / 16

Page 39: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays - Lendo

Jeito direto: exige uniformidade12000.0 .213246E-1212001.0 .213368E-1212002.0 .213490E-1212003.0 .213611E-12

...

READ(unity,’(8x,1e11.6)’) espectro

mas nao muitoREAD(unity,*)lixo(:,:)

Atraves de loop: mais controleDO i=inicio,fim,passoREAD(unity,format) lambda(i),fluxo(i)ENDDO

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 12 / 16

Page 40: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays - Escrevendo

Direto (loop implıcito)WRITE(unity,’(5(1f7.1,3x))’)(matriz(i,:),i=1,100)

Mais direto (tudo implıcito)WRITE(unity,*)matriz

Com loopDO i=1,10WRITE(*,*)vetor(i)ENDDO

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 13 / 16

Page 41: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays - Escrevendo

Direto (loop implıcito)WRITE(unity,’(5(1f7.1,3x))’)(matriz(i,:),i=1,100)

Mais direto (tudo implıcito)WRITE(unity,*)matriz

Com loopDO i=1,10WRITE(*,*)vetor(i)ENDDO

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 13 / 16

Page 42: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays - Escrevendo

Direto (loop implıcito)WRITE(unity,’(5(1f7.1,3x))’)(matriz(i,:),i=1,100)

Mais direto (tudo implıcito)WRITE(unity,*)matriz

Com loopDO i=1,10WRITE(*,*)vetor(i)ENDDO

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 13 / 16

Page 43: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays - Algumas funcoes especiais

WHERE(matriz < 0)matriz=01 -2 3 45 6 -7 89 10 11 -12

1 0 3 45 6 0 89 10 11 0

SUM e COUNTmedia=SUM(a)/COUNT(a /= 0)desvpad=SUM(SQRT((a-media)**2))/COUNT(a /= 0)

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 14 / 16

Page 44: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Arrays - Algumas funcoes especiais

WHERE(matriz < 0)matriz=01 -2 3 45 6 -7 89 10 11 -12

1 0 3 45 6 0 89 10 11 0

SUM e COUNTmedia=SUM(a)/COUNT(a /= 0)desvpad=SUM(SQRT((a-media)**2))/COUNT(a /= 0)

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 14 / 16

Page 45: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Subrotinas

PROGRAM exemploREAL :: vetor(3)READ(*,*) vetorCALL modulo(vetor,mod)WRITE(*,*) modEND PROGRAM exemplo

SUBROUTINE modulo(v,n)REAL :: v(3)n=SQRT(v(1)**2+v(2)**2+v(3)**2)END SUBROUTINE modulo

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 15 / 16

Page 46: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Algumas funcoes intrınsecas

MINLOC(a,mask) - localiza o valor mınimo do array a para o quala mascara mask tem valor T

MINVAL(a,mask) - similar ao anterior mas retorna o proprio valorTRIM(str) - remove os espacos em branco da string strINDEX(str1,str2) - retorna a posicao que a string str2 ocupa nastring str1

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 16 / 16

Page 47: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Algumas funcoes intrınsecas

MINLOC(a,mask) - localiza o valor mınimo do array a para o quala mascara mask tem valor TMINVAL(a,mask) - similar ao anterior mas retorna o proprio valor

TRIM(str) - remove os espacos em branco da string strINDEX(str1,str2) - retorna a posicao que a string str2 ocupa nastring str1

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 16 / 16

Page 48: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Algumas funcoes intrınsecas

MINLOC(a,mask) - localiza o valor mınimo do array a para o quala mascara mask tem valor TMINVAL(a,mask) - similar ao anterior mas retorna o proprio valorTRIM(str) - remove os espacos em branco da string str

INDEX(str1,str2) - retorna a posicao que a string str2 ocupa nastring str1

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 16 / 16

Page 49: Daniel Ruschel Dutrarns/astroprog/f90_daniel.pdf · OPEN(50,file=’meuarquivo.dat’) Formato Uma string que define a forma de ler ou escrever. ’(3f9.3)’ !3 floats de 9 d´ıgitos,

Algumas funcoes intrınsecas

MINLOC(a,mask) - localiza o valor mınimo do array a para o quala mascara mask tem valor TMINVAL(a,mask) - similar ao anterior mas retorna o proprio valorTRIM(str) - remove os espacos em branco da string strINDEX(str1,str2) - retorna a posicao que a string str2 ocupa nastring str1

Daniel Ruschel Dutra (UFRGS) Fortran 90 21 de maio de 2010 16 / 16