1. Fortran 언어의 소개

Download Report

Transcript 1. Fortran 언어의 소개

1. Fortran 언어의 소개
1.1
1.2
1.3
1.4
1.5
서론
자료
기본 연산
Do 문
파일 열기
1.1 서론
Computer
Input
devices
Main
Memory
Secondary
memory
CPU
Main Memory (RAM): Volatile, very fast and expensive
Secondary memory: nonvolatile, slower and cheaper,
ex) hard disk
Output
devices
• 기계어 (Machine language): 컴퓨터가 인식하고 수행하는 언어
• 고급어 (High-level language): 사람이 작성하는 언어
• High-level language -> compiler-> machine language
• High-level language: Basic, C++, Fortran, Java 등
• Fortran : 일반적 과학 계산에 많이 사용되는 언어
Fortran 의 역사
Fortran (FORmula TRANSlation)
The start for translating scientific equations into computer code
Developed during 1954-1957 by IBM
Before that time, essentially all computer programs were generated
by machine language.
FORTRAN : officially released in 1957
FORTRAN II: 1958
FORTRAN IV: 1962- FORTRAN66
FORTRAN 77: 1988
Fortran 90 : 1992
Fortran 95: 1996
… Fortran 2008: 2010, Fortran 2015: 2016
대기과학에서 Fortran의 사용 예
일기예보 모델과 기후 모델들이 Fortran 언어로 작성되어 있음
예) WRF model, UM model (기상청 현업)과 CESM (기후모델),
대기오염 확산 모델 (CMAQ), 황사 모델 (ADAMS) 등
프로그램의 구조
프로그램= 자료 구조 (Data structure)+ 알고리즘 (Algorithm)
사용하는 언어 문법과 관련된 것: 자료 구조
알고리즘: 문제를 해결하기 위한 논리나 절차
프로그래밍을 통한 문제 해결법
1) 문제 요구 조건의 구체화
2) 문제 분석
3) 문제 해결을 위한 알고리즘의 설계
4) 알고리즘에 따른 프로그램의 작성
5) 작성된 프로그램 테스트 및 검증
알고리즘의 평가
1) 신뢰성이 높을 것
2) 처리 효율이 좋을 것
3) 일반적일 것 (특정상황에서만 사용되는 알고리즘이 아니라 다양한
상황에서 통용되어야 함
4) 확장성이 있을 것 : 변경 사항을 간단하게 수정
5) 알기 쉬울 것
6) 이식성이 높을 것
프로그램의 수행
• 프로그램을 작성한다. -> .F90, .f95 등
• 프로그램을 compile 시킨다.-> .obj 파일이 만들어짐
• 링크를 시킴-> .exe 파일이 만들어짐
Fortran
program
compile
Object
file
다양한 compiler 들이 있음.
예) pgf90, ifort 등
• 프로그램을 수행한다.
link
Executable
program
Fortran Program 1
F90 프로그램은 Program 이름으로 시작해서 end로 끝남
F90 이후 free format으로 작성
프로그램의 기본 구조
Program name
선언부
실행부
End
Ex) Program test1
integer i1, i2
i1=1
I2=1
Isum=i1+i2
Print*, isum
end
: 변수의 선언
: 실행부
1.2 자료
자료의 형태
정수형, 실수형, 복소수형 : 수치형 자료
문자형, 논리형 : 비 수치형 자료
상수와 변수
상수: 프로그램 내에서 값이 변화하지 않음
변수: 프로그램 내에서 값이 변화함
변수형의 선언
Integer: 정수형임을 선언
Real: 실수형임을 선언
Character: 문자형임을 선언
Ex) Program test1
integer i1, i2
i1=1
I2=1
Isum=i1+i2
Print*, isum
end
i1과 i2라는 변수를 정수형으로 선언함
Integer :: i1, i2 도 가능함
• 암시적으로 I, j, K, l, m, n으로 시작하는 변수는 정수형으로 간주
나머지 문자로 시작하는 변수는 실수형으로 간주함
• Implicit none : 모든 변수를 선언해 주어야 함
Ex) Program test1
integer i1, i2
i1=1
I2=1
Isum=i1+i2
Print*, isum
end
Implicit none 이 선언되지 않은 경우
Isum이라는 변수를 정수형으로 선언하지 않았지만
사용되고 있음
• Implicit none이 사용되는 경우
Program test1
implicit none
integer i1, i2, isum
i1=1
I2=1
Isum=i1+i2
Print*, isum
end
Print*, isum : isum의 값을 화면에 출력함
배열과 parameter
Parameter
: parameter로 선언된 상수값은 프로그램 내에서 변하지 않는 상수값임
예) integer, parameter:: i1=365
Dimension (배열)
같은 이름으로 불리어지는 자료의 집단
Dimension으로 선언됨
예) integer, dimension(320):: idata
320개의 정수형 변수를 갖는 배열을 idata라고 선언함
예) real, dimension(5):: data2
5개의 실수를 갖는 변수를 data2로 선언함
• 배열의 자료를 지정하는 방법
Real, dimension(5):: adata
Data adata/0.1, 2.0, 1.2, 3.0, 4.0/
또는
Real, dimension(5):: adata=(/0.1, 2.0, 1.2, 3.0, 4.0/)
Program test 2
Integer, parameter:: i1=2, i2=3
integer, dimension(2):: isum
Isum(1)=i1+i2
Isum(2)=i1+2*i2
Print*, isum(1), isum(2)
end
1.3 기본 연산
덧셈: A=B+C
뺄셈: A=B-C
나눗셈: A=B/C
곱셈: A=B*C
제곱: A=B**2
제곱근: A=sqrt(B) 또는 A=B**0.5
정수형 변수간의 계산은 정수로 나옴
예를 들면 5를 2로 나누는 경우 2가 나옴.
2.5가 나오게 하려면 실수형으로 바꾸어주어야 함
정수형변수를 실수형으로 바꾸는 방법
Float(isum)/Float(i2)
Program test 3
Integer, parameter:: i1=2, i2=3
integer, dimension(2):: isum
Isum(1)=i1+i2
Isum(2)=i1+2*i2
Print*, float(isum(1))/float(isum(2))
end
1.4 Do 문
반복적인 작업을 수행하는 경우에 사용함
Sum=0.
Do ii=1, 3
Sum=sum+idata(ii)
Enddo
Ave=sum/3.
양식
Do ii=istart, iend, interval
실행문
enddo
다중 do
do ii=1,5
do jj=1,10
실행문
enddo
Enddo
예)
do ii=1,365
do jj=1,48
read(10,*) idata, adata
enddo
enddo
Implied Do 순환
Print*, a(1), a(2), a(3), a(4)
Print*, (a(ii), ii=1, 4)
실습과제
• 1번부터 100번까지 홀수의 합을 출력하되 10단위로
즉 1번부터 10번까지 홀수의 합을 출력,
11번부터 20번까지 홀수의 합을 출력 등으로 해서
맨 마지막에 91번부터 100번까지 홀수의 합을 화면에 출력
하는 프로그램을 작성하시오.
1.5 파일 열기
Open(10,file=‘nojang2014.dat’,status=‘old’)
파일의 이름과 상태를 지정해 줌
읽어드릴 파일의 이름은 ‘ ‘ 안에 들어가야 함
기존에 있는 파일의 경우 status=‘old’
Status가 알려져 있지 않은 파일의 경우 status=‘unknown’