UNIVERSIDADE FEDERAL DE PELOTAS
FACULDADE DE METEOROLOGIA
DEPARTAMENTO DE METEOROLOGIA
Lista de exercícios 04
Disciplina: CAM 1 – Prof. Mateus da Silva Teixeira – Data de entrega: 29/09/2015
PARTE 1 - FUNÇÕES INTRÍNSECAS PARA ARRANJOS EM FORTRAN 90
a) ALLOCATED( arranjo ) → informa se o arranjo estão ou não alocado. Funciona apenas para
variáveis alocáveis.
b) LBOUND( arranjo, dim ) → se dim está presente, retorna o limite inferior (do índice) daquela
dimensão. Se dim está ausente, retorna o limite inferior (dos índices) de todas as
dimensões de arranjo.
c) SHAPE( arranjo ) → retorna a forma de arranjo.
d) SIZE( arranjo, dim ) → se dim está presente, retorna a extensão da dimensão informada, caso
contrário, retorna o número total de elementos de arranjo.
e) UBOUND( arranjo, dim ) → idem LBOUND(), mas retorna o limite superior.
Exemplo 01:
PROGRAM arranjo2D
IMPLICIT NONE
INTEGER, DIMENSION(5,5) :: a
a = RESHAPE( (/1,6,11,16,21,2,7,12,17,22,3,8,13,18,23,4,9, &
14, 19,24,5,10,15,20,25/), (/5,5/) )
WRITE(*,*) 'Características do arranjo “a”:'
WRITE(*,*) 'Limites inferiores das dimensões de “a”:', LBOUND(a)
WRITE(*,*) 'Limites superiores das dimensões de “a”:', UBOUND(a)
WRITE(*,*) 'A forma de “a” é: ', SHAPE(a)
WRITE(*,*) 'O tamanho de “a” é ', SIZE(a)
END PROGRAM arranjo2D
Exercícios para o programa arranjo2D (Exemplo 01):
1)
Pesquise a finalidade da função intrínseca RESHAPE. Por que ela é usada neste programa
2)
Altere a declaração do arranjo “a”, colocando diferentes limites para cada uma de suas
dimensões, respeitando a quantidade total de elementos, ou seja, 25 elementos. Para a
sua alteração, foi necessária alguma outra alteração? Que respostas foram obtidas para
os limites inferior e superior do arranjo “a”, após essa alteração?
3)
A partir do programa original (acima) altere o programa para que sejam exibidas apenas os
limites inferior e superior da primeira dimensão.
Exemplo 02:
PROGRAM arranjo2Da
IMPLICIT NONE
INTEGER, DIMENSION(3,3) :: b
INTEGER :: i,j,k,l,m,n
b = RESHAPE( (/­1,2,­3,4,­5,6,­7,8,­9/), (/3,3/) )
m = UBOUND( b,1 )
n = UBOUND( b,2 )
k = LBOUND( b,1 )
l = LBOUND( b, 2 )
WRITE(*,*) 'O arranjo “b” tem ', SIZE(b),' elementos'
WRITE(*,*) 'Eles são:'
DO i = k, m
WRITE(*,*) ( b(i,j), j = l, n )
END DO
END PROGRAM arranjo2Da
Exercícios para o programa arranjo2Da (Exemplo 02):
1)
O que faz esse programa?
2)
Altere o programa para que os limites inferiores das dimensões sejam atribuídos a um vetor.
Faça o mesmo para os limites superiores.
OUTRAS FUNÇÕES INTRÍNSECAS
f) ALL( máscara ) → retorna TRUE se todos os valores em máscara são verdadeiros.
g) ANY( máscara ) → retorna TRUE se qualquer valor em máscara for verdadeiro.
h) COUNT( máscara ) → retorna o número de elementos verdadeiros em máscara.
i) DOT_PRODUCT( vetorA, vetorB ) → calcula o produto escalar entre dois vetores de mesmo
tamanho.
j) MATMUL( matrizA, matrizB ) → calcula a multiplicação matricial entre duas matrizes
conformes.
k) MAXLOC( arranjo, máscara ) → retorna a localização do valor máximo de arranjo entre
aqueles para os quais a máscara foi verdadeira. O resultado é um arranjo
unidimensional com um elemento para cada dimensão de arranjo. O uso de máscara é
opcional.
l) MAXVAL( arranjo, máscara ) → retorna o valor máximo de arranjo entre aqueles para os quais
máscara foi verdadeira. O uso de máscara é opcional.
m) PRODUCT( arranjo, máscara ) → calcula o produto dos elementos de arranjo para os quais
máscara é verdadeira. O uso de máscara é opcional; se não estiver presente, todos os
elementos são usados.
n) SUM( arranjo, máscara ) → calcula a soma dos elementos de arranjo para os quais máscara é
verdadeira. O uso de máscara é opcional; se não estiver presente, todos os elementos
são usados.
o) TRANSPOSE( matriz ) → retorna a transposta de um arranjo bidimensional.
Exemplo 03:
PROGRAM arranjo2Db
IMPLICIT NONE
INTEGER, DIMENSION(3,3) :: b
b = RESHAPE( (/­1,2,­3,4,­5,6,­7,8,­9/), (/3,3/) )
PRINT *,'Todos os elementos de “b” são menores que zero?', ALL( b < 0 )
PRINT *,'Algum elemento de “b” é menor que zero?', ANY( b < 0 )
PRINT *,'Há ', COUNT( b < 0 ), ' elementos menores que zero.'
PRINT *,'O local do máximo valor de “b” é ', MAXLOC( b )
PRINT *,'O local do máximo valor negativo de “b” é ', MAXLOC( b, b < 0 )
PRINT *,'O máximo valor de “b” é ', MAXVAL( b )
PRINT *,'O máximo valor negativo de “b” é ', MAXVAL( b, b < 0 )
PRINT *,'O produto de todos os elementos de “b” é ', PRODUCT( b )
PRINT *,'O produto de todos os elementos negativos de “b” é ', PRODUCT( b, b < 0 )
PRINT *,'A soma de todos os elementos de “b” é ', SUM( b )
PRINT *,'A soma de todos os elementos negativos de “b” é ', SUM( b, b < 0 )
PRINT *,'A transposta de “b” é ', TRANSPOSE( b )
END PROGRAM arranjo2Db
Exercícios para o programa arranjo2Db (Exemplo 03):
1) Crie um programa em Fortran 90 que calcule o produto escalar entre dois vetores. Use a função
DOT_PRODUCT() para certificar os seus resultados. Apresente um exemplo de aplicação do seu
programa, calculando o produto escalar de dois vetores a sua escolha.
PARTE 2 – SUBROTINAS EM FORTRAN 90
A previsão de tempestades é, em grande parte dos centros de previsão, auxiliada por Índices de
Instabilidade. Os índices de instabilidade têm o principal objetivo de indicar o grau de instabilidade
da atmosfera. Quanto maior esse grau de instabilidade, maior é a possibilidade para ocorrência de
tempestades.
Um dos índices de instabilidade mais utilizados nos centros de previsão do tempo é o Índice K. Esse
índice é representado, matematicamente, pela equação abaixo:
K=T 850 −T 500 +Td 850 −(T 700 −Td 700 )
sendo T850, T700 e T500 as temperaturas do ar nos níveis de 850, 700 e 500 hPa, respectivamente, e
Td850 e Td700 as temperaturas do ponto de orvalho nos níveis de 870 e 700 hPa, respectivamente.
Assim, crie uma SUBROUTINE que calcula o índice K, conforme a equação acima. Escreva um
programa Fortran que usa essa SUBROUTINE, utilizando cada um dos seguintes dados
meteorológicos:
1. T850=22.8, Td850=9.8, T700=13.6, Td700=-0.4, T500=-38.7
2. T850=12.4, Td850=12.4, T700=8.4, Td700=5.3, T500=-8.7
3. T850=11.8, Td850=6.9, T700=4.0, Td700=-14.0, T500=-7.3
O programa Fortran que usa a SUBROUTINE criada para calcular o índice K deve informar ao
usuário o grau de instabilidade, usando a seguinte classificação:
•
•
•
•
•
K<20: baixa instabilidade
20 ≤ K ≤ 25: ocorrência de tempestades isoladas
26 ≤ K ≤ 30: ocorrência de tempestades dispersas
31 ≤ K ≤ 35: ocorrência de numerosas tempestades
K > 35: alta probabilidade de tempestades
Download

CAM 1