introdução ao fortran 90 - inpe/lac - laboratório …margarete/fortran90class.pdftodos os nomes...
Post on 08-Feb-2019
221 Views
Preview:
TRANSCRIPT
Estrutura de um programa Fortran
Um prog. em Fortran 90 consiste de frases
algumas frases (statements) são executadasoutras são descritivas
Os programas são executados sequencialmente,iniciando na primeira frase executável.
Tips Fortran 90 – p.3/87
Estrutura de um programa principal
PROGRAM namespecification statements...........executable statements...........END PROGRAM name
Tips Fortran 90 – p.4/87
Exemplo:
PROGRAM SIMPLE! THIS IS A SIMPLE SAMPLE PROGRAMIMPLICIT NONEREAL :: A,B,C,TOTALA = 1.0B = 2.0C = 3.0TOTAL = A + B + CPRINT *,’TOTAL IS’,TOTAL
END PROGRAM SIMPLE
Tips Fortran 90 – p.5/87
Program Statement
PROGRAM program name
Todos os nomes em Fortran devem:ter tamanho máximo de 31 caracterescomeçar com uma letra (maiúscula/minúscula)pode ser composto apenas por: A-Z,a-z, 0-9 e _
Tipos de declarações statements:IMPLICIT NONE —- não permite atribuições detipos defaultREAL :: {list of variables} — todas as variáveisprecisam ser declaradas
Tips Fortran 90 – p.7/87
(cont.)
Entrada e saída: PRINT e READ —- lista-direta deoutput e input statements
PRINT *,{list of items to be printed}READ *,{list of items to be read in}
CALL {subroutine name} ({argument list}) — é umprocesso de transferência para uma subrotina deinformações com argumentos.
END ou END PROGRAM {name}
Tips Fortran 90 – p.8/87
Cometários iniciais de um prog.
nome dos autores
data e modificações
documentação para usuários
documentação técnica: que informações são utéispara o entendimento do programa.
limitações do programa.
Tips Fortran 90 – p.9/87
Exemplo
...! Author: CooleyTuckey!! Date: 10th july 1965: original code creation.! Modified: 19th Mar 2004: clarified program structure.!! Program Description:! FFT program!! Input Description: The numbers to be read in must be real.!! List of Variables Used:! X...CONTAINS THE TIME SERIES! COEF...CONTAINS THE RESULT FFT COEF.
....
Tips Fortran 90 – p.10/87
Compilador e erros nos programas
Erros podem fazer com que os programas não sejamexecutados, ou pior ainda, fazer com que eles nosdeem respostas incorretas.
A maioria das tarefas ligadas a programação estáassociada a corrigir erros.
Classificação dos erros:erros de sintaxeerros de lógica
Tips Fortran 90 – p.12/87
Design, Maintainability, Portability
especificar o problema a ser resolvido claramente
input/output claros
um design limpo e modular
uso de procedures/libraries já existentes
nomes descritivos, comentarios claros e úteis
verificação de erro na entrada e nos estágios internosdos cálculos.
programas testes com casos realisticos
Tips Fortran 90 – p.14/87
Exercícios - erros
PROGRAM test! This program contains four major errors && and three examples of bad programming stylePRINT *,Please type a numberREAD *,numbrPRINT *,"The number you typed was ",numberEND
Tips Fortran 90 – p.15/87
(cont.)
quais são os erros?
compile o programa, verifique os erros encontrados,faça as correções, compile novamente, execute-o eentre com o número 123 qdo solicitado. A resposta foicorreta?
E se a entrada fosse 12.3?
Como podemos ajudar o compilador?
Tips Fortran 90 – p.16/87
(cont.)
quais são os erros?
compile o programa, verifique os erros encontrados,faça as correções, compile novamente, execute-o eentre com o número 123 qdo solicitado. A resposta foicorreta?
E se a entrada fosse 12.3?
Como podemos ajudar o compilador?
Tips Fortran 90 – p.16/87
(cont.)
quais são os erros?
compile o programa, verifique os erros encontrados,faça as correções, compile novamente, execute-o eentre com o número 123 qdo solicitado. A resposta foicorreta?
E se a entrada fosse 12.3?
Como podemos ajudar o compilador?
Tips Fortran 90 – p.16/87
(cont.)
quais são os erros?
compile o programa, verifique os erros encontrados,faça as correções, compile novamente, execute-o eentre com o número 123 qdo solicitado. A resposta foicorreta?
E se a entrada fosse 12.3?
Como podemos ajudar o compilador?
Tips Fortran 90 – p.16/87
F77 fixed form
brancos não são significativos, exceto em caracteres
Fortran statement são escritos nas colunas 7 to 72
linha comentário — C ou* na coluna 1
continuação de uma linha — um caracter na coluna 6
máximo de um statement 19 linhas de continuação
labels ficam nas colunas 1 a 5
Tips Fortran 90 – p.18/87
F90 free form
brancos são significativos, eles não devem aparecerem nomes e pelo menos um branco deve separarnomes/números e Fortran keywords.
linhas de comentário ! - mesmo que não seja nocomeço (trailing comments)
linhas podem ter até 132 caracteres e podem contermais de um statement separados por ";"
& indica que o statement continua na próxima linha.
39 linhas de continuação
label possuem até 5 digitos que precedem ostatement.
Tips Fortran 90 – p.19/87
Fortran Character Set
A–Z. (maiúsculas ou minúsculas).
digitos 0- 9
_
branco = + - * / ( ) , . $ ’ ": ! % & ; < > ?
ASCII character set são legais em constantes literais,e.g. ’fred@home’, ’[...]’.
Tips Fortran 90 – p.21/87
Constantes and Variáveis
memória principal de um computador consistepalavras (words)
cada word uma certa quantidade de informação
typicamente, uma palavra possui 2 bytes (8 bits -binary digits) de informação
Tips Fortran 90 – p.22/87
Armazenamento na memória emFortran
Integers: e.g. 1, 123, -56 (4 bytes (2 words = 32 bits))
Real (or floating point) numbers: e.g. 1.23, -4.56,1.0E02
Real – armazenado em duas partes: a mantissa eo expoent, e.g. 4.5E02.single precision real numbers: 4 bytes (2 words =32 bits)double precision real numbers are stored in 8 bytes( 4words = 64 bits)
Character or arrays de texto: e.g. ABCDE, FREDtamanho das variáveis caracter dependem da suadeclaração inicial (e.g. CHARACTER*4 = 32 bits =4 letters). Tips Fortran 90 – p.23/87
Variable Type Declarations
IMPLICIT NONETYPE :: {names}CHARACTER (LEN=length) :: name1, name2
Exemplo:
REAL :: a,b,cINTEGER :: i,j,kCHARACTER (LEN=10) :: name="Undefined"
Constantes – especificadas com o PARAMETERREAL, PARAMETER :: alpha=3.01INTEGER, PARAMETER :: ten=10
Tips Fortran 90 – p.24/87
Derived Data Types
Tipos padrões do Fortran:
REAL, INTEGER, CHARACTER, DOUBLEPRECISION, LOGICAL, COMPLEX.
Tipos derivados:
TYPE new_typecomponent defn
...END TYPE new_type
Tips Fortran 90 – p.25/87
Exemplo - data type
TYPE WorkEta_participante
CHARACTER (LEN=12) :: first_name,
& middle_name last_name
INTEGER :: age
CHARACTER :: Origin_Institute
END TYPE WorkEta_participante
Tips Fortran 90 – p.26/87
Exemplo - data type
variáveis passam a ser declaradas:
TYPE(WorkEta_participante) :: cristiane,
cristine =
& WorkEta_participante
("Cristiane","Maria","Osorio",28,"ONS")
componentes passam a ser referidas:cristiane\%first_namecristiane\%agecristiane\%Origin_Institute
Tips Fortran 90 – p.27/87
Exemplo
PROGRAM geometry! Copyright 1994, Miles Ellis, Ivor Philips and Tom Lahey! A program to use derived types for two-dimensional! geometric calculations! Type definitionsIMPLICIT NONE
TYPE pointCHARACTER(LEN=12) :: nameREAL :: x,y ! Cartesian coordinates of the pointEND TYPE point
Tips Fortran 90 – p.28/87
Exemplo (cont.)
TYPE lineCHARACTER(LEN=12) :: nameREAL :: a,b,c ! coefficients of defining equation
END TYPE line
! Variable declarationsTYPE(point) :: p1,p2TYPE(line) :: p1_to_p2
Tips Fortran 90 – p.29/87
Exemplo (cont.)
! Read dataPRINT *,"Please type co-ordinates of first point"READ *,p1%x,p1%yPRINT *,"Please type co-ordinates of second point"READ *,p2%x,p2%y
Tips Fortran 90 – p.30/87
Exemplo (cont.)
! Calculate coefficients of equation representing the linep1_to_p2%a = p2%y - p1%yp1_to_p2%b = p1%x - p2%xp1_to_p2%c = p1%y*p2%x - p2%y*p1%x
! Print resultPRINT *,"The equation of the line joining these two points is"PRINT *,"ax + by + c = 0"PRINT *,"where a = ",p1_to_p2%aPRINT *," b = ",p1_to_p2%bPRINT *," c = ",p1_to_p2%c
END PROGRAM geometry
Tips Fortran 90 – p.31/87
Expressões aritméticas
+ addition- subtraction* multiplication/ division** exponentiationPor exemplo:
� � � � ��� ��� � � � ��� � � ��� � � �
Ordemde cálculo:
parenteses (o mais interno primeiro),
exponenciação,
multiplicação e divisão,
adição e subtração.
Por exemplo:
� � � � � �� � �� � � � ��
� � � � � � � � � � � ��� � � � � �
Tips Fortran 90 – p.33/87
Expression Type
IMPLICIT NONEREAL :: X,YINTEGER :: I,J
I + J resulta num tipo integerX/Y resulta num tipo realI + X resulta em um tipo real.
I=5J=3I/J = ?
(Isso é uma fonte potencial de erros lógicos!!!)
Tips Fortran 90 – p.34/87
Assignment Statement
variable = expressionPor exemplo:IMPLICIT NONEREAL :: A,B,C,DINTEGER :: I,J
A = 3.0B = 1.0C = -5.1D = A*B+CD=?
I = 4.8I=I+1I=?
Tips Fortran 90 – p.35/87
Strings
character string to acharacter variable, quando ostamanhos não são os mesmos as strings são preenchidaspor zeros ou cortadas à direita.
A única operação existente com caracteres é aconcatenação:char = "fred"//"die"substringschar(1:2) ! access first two characterschar(:10) ! access first ten characterschar(4:) ! access fourth till the last characters
Tips Fortran 90 – p.36/87
Overflow, Underflow and DivideCheck Error
overflow – qdo. a magnitude de um resultado é maiordo que a capacidade de armazenamento.
underflow – qdo. a magnitude de um número é menorque a do menor número permitido
qdo ocorre uma divisão por zero — divide check error.
Como esses erros são tratados depende doscompiladores
Tips Fortran 90 – p.37/87
Exercícios:
Identifiquem como constantes real, integer nem umanem outra:
���
� �� � � � � � � � � � �� � � � � � �� � � � � � � � ��
��
� � � ��
Quais os nomes a seguir são nomes válidos emFortran?QAZ, COMPUTER, TUFF., A+B, 3XY, AJKLMN, L9A45
Aonde estão os erros nos statements?
X = A + 3B3.14159 = PIX + Y = (A+B)/Z-2*PI*RJ = M-4.5*N**-2
Tips Fortran 90 – p.38/87
Exercícios:
Considere A,B,X,Z (real) e I,J,K,N (integer)
A = 6.0 X=-6.0 J=2B = 3.2 I=-3 N=5
Quais são os resultados obtidos:
Z = (A+B)/XZ = J + I + NZ = (J-I)/NZ = N/J+I+2K=BK = N/JK = B*3.0 + XK = (A+B-X)/3.0K=I*J/N ; K=I/N*J
Tips Fortran 90 – p.39/87
READ Statement
READ *,{input list}READ(5,*) {input list}READ(UNIT=5,FMT=*) {input list}
Por exemplo,READ(5,*) A,B,C
são esperados os valores de A,B, C separados por virgulas
ou espaços em branco.
Tips Fortran 90 – p.41/87
WRITE Statement
PRINT *,{output list}WRITE(6,*) {output list}WRITE(UNIT=6,FMT=*) {output list}
Por exemplo,WRITE(6,*) ’ THE TOTAL IS:’, TOTAL
Tips Fortran 90 – p.42/87
Exemplo
PROGRAM Celscius_to_fahrenheit! Copyright 1994, Miles Ellis, Ivor Philips and Tom Lahey! A program to convert a Celsius temperature to Fahrenheit
! Variable declarationsIMPLICIT NONEREAL :: temp_c,temp_f
! Ask for Celsius temperaturePRINT *,"What is the Celsius temperature? "READ *,temp_c
! Convert it to Fahrenheittemp_f = 9.0*temp_c/5.0 + 32.0
Tips Fortran 90 – p.43/87
Exemplo
! Print both temperaturesPRINT *,temp_c,"C = ",temp_f,"F"
END PROGRAM Celsius_to_fahrenheit
Tips Fortran 90 – p.44/87
Exercícios
Escreva um programa que leia 4 números, sendo os 2primeiros do tipo real e os 2 últimos do tipo integer.
Escreva os números na ordem inversa.
Escreva a soma dos 2 primeiros números e as dos 2últimos números.
Tips Fortran 90 – p.45/87
Main programs
Programas simples podem conter apenas um módulode programa, que são chamados programasprincipais.
Problemas mais complexos são subdivididos emsubprograms e procedures (functions e subroutines)
Isso deixa o problema modular e facilita o reutilizaçãodo código
COMMON blocks é uma forma de se acessar variáveisglobais, mas atualmente esse tipo de procedimentonão é recomendado.
Tips Fortran 90 – p.47/87
Layout das unidades deprogramação
main program unit
function subprogram
subroutine subprogram
modules and block data subprogram
Tips Fortran 90 – p.48/87
Estrutura de um programa
PROGRAM {name}specification statements........................executable statements.....................
END PROGRAM {name}
FUNCTION {name} ({argument list})specification statements........................executable statements.....................
END FUNCTION {name}
Tips Fortran 90 – p.49/87
Estrutura de um programa (cont.)
SUBROUTINE {name} ({argument list})specification statements........................executable statements.....................
END SUBROUTINE {name}
MODULE {name}specification statements........................executable statements.....................
END MODULE {name}
Tips Fortran 90 – p.50/87
Estrutura de um programa (cont.)
BLOCK DATA {name}specification statements........................
END BLOCK DATA {name}
Tips Fortran 90 – p.51/87
Expressões relacionais
Uma expressão relacional compara duas expressões pormeio de um operador relacional e retorna o valor TRUE ouFALSE.< .LT. less than<= .LE. less than or equal to== .EQ. equal to/= .NE. not equal to>= .GE. greater than or equal to> .GT. greater than
Tips Fortran 90 – p.53/87
Exemplos de expressões relacionais
pay .LT. credit
half*2 .GE. min**3/denom
OBS: Computadores não representam bem númerosreais (e.g. 1.0/3.0) então é perigoso usar .EQ. . Porque?
Tips Fortran 90 – p.54/87
Expressões lógicas
Operadores lógicos
.OR. logical disjunction (inclusive or): true if either orboth of its operands are true
.AND. logical conjunction: true if both of its operandsare true
.EQV. true if its operands have the same logical value
.NEQV. true if its operands have the opposite logicalvalue
Tips Fortran 90 – p.55/87
(cont.)
.AND. tem precedencia sobre .OR.
operadores aritimétricos tem preferência sobreoperadores relacionais
as duplas a seguir são equivalentes:jill .EQ. jack .OR. boulder .GT. pebble .AND. ant .LT.giraffe(jill .EQ. jack) .OR. ((boulder .GT. pebble) .AND.(ant .LT. giraffe))
.NOT. tem precedencia sobre .AND.
as duplas a seguir são equivalentes:.NOT. (a<b .AND. b<c)a>=b .OR. b>=c Tips Fortran 90 – p.56/87
Logical Variables
LOGICAL pos, neg,answer
pos = num .GE. 0neg = .NOT. pos
answer = .TRUE.answer = (good .GT. bad)
Tips Fortran 90 – p.57/87
IF
IF(E) S
E é uma expressão lógica
S é qq comando executável, exceto DO, outro IF ouum block-IF
Exemplos,IF(pay .LT. starve) pay = pay + 250.0IF(number .GT. 10) WRITE(*,*) ’number > 10’
Tips Fortran 90 – p.59/87
Erros comuns
1)IF(pay .LT. starve) pay = pay +250.0pay=pay+100.02)
IF(pay .LT. starve) pay = pay +250.0IF(pay .GE. starve) pay=pay+100.0
3) Forma mais correta:IF(pay .GE. starve) pay=pay+100.0IF(pay .LT. starve) pay = pay +250.0
Tips Fortran 90 – p.60/87
Block IF Statements
Basic Block IF
IF (logical expression) THEN[Lines of Fortran]
ENDIF
Else-If Block:
IF (logical expression1) THEN[Lines of Fortran]
ELSEIF (logical expression2) THEN[Lines of Fortran]
ELSEIF (logical expression3) THEN[Lines of Fortran]
ENDIF
Tips Fortran 90 – p.61/87
Block IF Statements (cont.)
Else Block:
IF (logical expression1) THEN[Lines of Fortran]
ELSEIF (logical expression2) THEN[Lines of Fortran]
ELSEIF (logical expression3) THEN[Lines of Fortran]
ELSE[Lines of Fortran]
ENDIF
Tips Fortran 90 – p.62/87
IF-THEN-ELSE-ENDIF
PROGRAM test! Copyright 1994, Miles Ellis, Ivor Philips and Tom Lahey
IMPLICIT NONEREAL, EXTERNAL :: cube_rootREAL :: x ; PRINT *,"x?" ; READ *,xPRINT *,"The cube root of ",x," is ",cube_root(x)
END PROGRAM test
Tips Fortran 90 – p.63/87
IF-THEN-ELSE-ENDIF (cont.)
REAL FUNCTION cube_root(x)
! Copyright 1994, Miles Ellis, Ivor Philips and Tom Lahey
IMPLICIT NONE
! Function to calculate the cube root
! of a positive real number
! Dummy argument declaration
REAL, INTENT(IN) :: x
! Local constant
REAL, PARAMETER :: epsilon=1E-20
Tips Fortran 90 – p.64/87
IF-THEN-ELSE-ENDIF (cont.)
! Eliminate (nearly) zero case
IF (ABS(x)<epsilon) THEN
cube_root = 0.0
! Calculate cube root by using logs
ELSE IF (x<0) THEN
! First deal with negative argument
cube_root = -EXP(LOG(-x)/3.0)
ELSE
! Positive argument
cube_root = EXP(LOG(x)/3.0)
END IF
END FUNCTION cube_rootTips Fortran 90 – p.65/87
CASE
SELECT CASE (case_expression)CASE (case_selector)block of Fortran statements
CASE (case_selector)block of Fortran statements....
CASE (case_selector)block of Fortran statements
CASE DEFAULTblock of Fortran statements
END SELECT
Tips Fortran 90 – p.66/87
case_ selector
case_ valuecase_ expression == case_ value.
low_ value:low_ value <= case_ expression.
high_ valuecase_ expression <= high_ value.
low_ value:high_ valuelow_ value <= case_ expression .AND. case_expression <= high_ value.
Tips Fortran 90 – p.67/87
Exemplo
PROGRAM seasons! Copyright 1994, Miles Ellis, Ivor Philips and Tom Lahey
IMPLICIT NONE! A program to calculate in which season! a specified date lies! Variable declarations
CHARACTER(LEN=10) :: dateCHARACTER(LEN=2) :: month
! Read datePRINT *,
& "Please type a date in the form yyyy-mm-dd"READ *,date
! Extract month numbermonth = date(6:7)
Tips Fortran 90 – p.68/87
Exemplo (cont.)
! Print seasonSELECT CASE (month)CASE ("08":"10")
PRINT *,date," is in the spring"CASE ("11","12","01":"03")
PRINT *,date," is in the summer"CASE ("04","05")
PRINT *,date," is in the autumn"CASE ("06","07")
PRINT *,date," is in the winter"CASE DEFAULT
PRINT *,date," is not a valid date"END SELECT
END PROGRAM seasons
Tips Fortran 90 – p.69/87
sintaxe DO
DO count=initial,final,inc[Lines of Fortran to be looped over]ENDDO
count é um integer – DO variable
Comandos internos ao DO
CYCLE
EXIT
Tips Fortran 90 – p.71/87
alinhamento DO
DO i=m1,m2,m3DO j=n1,n2,n3
[Lines of Fortran to be looped over]ENDDO
ENDDO
Tips Fortran 90 – p.73/87
Exemplo DO
PROGRAM multiplication_tables! Copyright 1994, Miles Ellis, Ivor Philips and Tom Lahey
IMPLICIT NONE! A program to print multiplication tables from 2 to 12 times! Variable declarationsINTEGER :: i,j! Outer loop defines which ’times table’DO i=2,12
PRINT *," "PRINT *,i," times table"DO j=1,12
PRINT *,i," times",j," is ",i*jEND DO
END DOEND PROGRAM multiplication_tables
Tips Fortran 90 – p.74/87
Exemplos
REAL :: grades(100),marks(100),topten(10)REAL, DIMENSION(100) :: grades, marks, topten(10)
INTEGER :: ages(50)LOGICAL :: answers(10)
INTEGER :: grid(50,50)REAL :: altitude(100,100), coordinate(50,50,10)
!REAL arrayname(lowerbound : upperbound)REAL A(0 : 10)
INTEGER I(-5:10,-20:100)REAL X(0:10,-5,5)
Tips Fortran 90 – p.76/87
Array constants e initial values
!array_name = (/ value_1, value_2, ... /)
arr = (/ 1,2,3,4,5,6,7,8,9,10 /)
!Para grandes arrays uma seq. de DO implicito:
! set arr = (/ 1,2,3,4,5,6,7,8,9,10 /)arr = (/ (i, i=1,10) /)
Tips Fortran 90 – p.77/87
Arrays as Subprogram Parameters
REAL :: HUGE(100),TINY(50)...CALL SIZE(HUGE,TINY,NUMBER)...STOPEND
SUBROUTINE SIZE(BIG,SMALL,N)REAL :: BIG(100),SMALL(50)...RETURNEND
Tips Fortran 90 – p.78/87
Arrays as Subprogram Parameters
PROGRAM ARRAY_EXAMPLE_2
REAL :: HUGE(100),TINY(50)...
NHUGE=100NTINY=50CALL SIZE(HUGE,TINY,NHUGE,NTINY)...
NHUGE=75NTINY=34CALL SIZE(HUGE,TINY,NHUGE,NTINY)
...END PROGRAM ARRAY_EXAMPLE_2
SUBROUTINE SIZE(BIG,SMALL,NBIG,NSMALL)REAL :: BIG(:),SMALL(:)...END SUBROUTINE SIZE
Tips Fortran 90 – p.79/87
Implied Do Loops
! (list of variables, control = start, finish, increment)
read(*,*) (A(I), I=1,10)
! 2D, array X(10,20) row by row
read(*,*) (( X(I,J), I=1,10), J=1,20)
do j=1,20read(*,*) ( X(I,J), I=1,10)
enddo
Tips Fortran 90 – p.80/87
Arrays em expressões
REAL, DIMENSION(20) :: a,b,c,d
a = c*d ! Fortran 90 array processing
DO i=1,20 ! Fortran 77 array processingb(i)=c(i)*d(i)
ENDDO
REAL:: a(1:20),b(0:19),c(10:29),d(-9:10)
a = c*d ! Fortran 90 array processing
DO i=1,20 ! Fortran 77 array processingb(i-1)=c(i+9)*d(i-10)
ENDDO Tips Fortran 90 – p.81/87
Arrays em intrinsic procedures.
Assume array1, array2, and a, b, c, d, e são conformablearraysarray1 = SIN(array2)arr_max = MAX(100,0,a,b,c,d,e)
Tips Fortran 90 – p.82/87
Exemplo
PROGRAM ArrayTest! Copyright 1994, Miles Ellis, Ivor Philips and Tom Lahey
IMPLICIT NONEINTERFACE
FUNCTION max_array(array_1,array_2)IMPLICIT NONEREAL, DIMENSION(:) :: array_1,array_2REAL, DIMENSION(SIZE(array_1)) :: max_array
END FUNCTION max_arrayEND INTERFACE
Tips Fortran 90 – p.83/87
Exemplo (cont.)
REAL, DIMENSION(10) :: a1,a2PRINT *,"array 1?"READ *,a1PRINT *,"array 2?"READ *,a2PRINT *,"Maximum array is ",max_array(a1,a2)
END PROGRAM test
Tips Fortran 90 – p.84/87
Exemplo (cont.)
FUNCTION max_array(array_1,array_2)! Copyright 1994, Miles Ellis, Ivor Philips and Tom Lahey
IMPLICIT NONE! This function returns the maximum of two arrays on an! element by element basis! Dummy argumentsREAL, DIMENSION(:) :: array_1,array_2! Result variableREAL, DIMENSION(SIZE(array_1)) :: max_array! Use the elemental intrinsic MAX to compare elementsmax_array = MAX(array_1,array_2)
END FUNCTION max_array
Tips Fortran 90 – p.85/87
top related