본문 바로가기

재료공학/포트란(Fortran)

Fortran(포트란): subprogram인 function과 subroutine

포트란에는 두가지 subprogram이 있다. 이는 1. function과 2. subroutine이다.

 

1. function

1.1 built in function: 포트란 프로그램이 이미 보유하고 있어서 그냥 써도 되는 function

예를 들면, sin, cos, tan...등등이 있다.

 

1.2 user defined function: 포트란 프로그램이 보유하고 있지 않은 말그대로 사용자인 우리가 직접 정의해주는 function이다.

 

(user defined function을 사용하는 예시)


program test6       

real a, b, c

 

a=2.

b=4.

c=sum(a,b)

 

write(*,*) c

 

pause 

stop

end


real function sum(a,b)

sum=a+b

return

end


prgram test6부터 pause/stop/end까지가 메인 프로그램이다. (여기서 pause는 안써도 되는데 간혹가다가 내 컴퓨터처럼 stop/end만 치면 입력창이 안뜨는 경우가 간혹 있다. 이런경우에는 stop/end 이전에 pause를 써주면 오류가 해결된다.)

 

function은 메인 프로그램이 다 끝난 이후에 작성해준다. 

 

function name(변수1, 변수2, 변수3...) 이런식으로 작성하면 된다. function은 그 자체가 변수에 해당한다. 그래서 function을 또 다른 상수(real number) c로 정의해줘야한다. function은 변수1, 2, 3의 함수로 나타난다. 

 

그리고 메인 프로그램이 아니라 서브 프로그램이므로 stop/end가 아니라 return/end이다. 

 

2. subroutine

subroutine name (변수1, 변수2, 변수3...)

declaration

statements

return

end

 

위와 같은 형태를 띈다. 

 

function과는 다르게, subroutine 자체는 변수가 아니다. 변수1, 변수2, 변수3 사이의 관계를 정의해준다. 그래서 function처럼 따로 또 정의를 해줄 필요가 없다.

 

예를 들면 '변수 1= 변수 2와 변수 3'과의 함수로 나타내질수 있다. 

 

subroutine을 사용한 예시는 아래와 같다.(function과 subroutine은 모두 메인 프로그램이 끝난후 그 뒤에 써줘야한다.)

 


program test

real a,b,sum_answer

 

a=3.

b=4.

 

call sum_routine(a,b,sum_answer)

 

write(*,*) sum_answer

 

pause

stop

end

 


subroutine sum_routine(a,b,sum_anwer)

real a,b,sum_answer

 

sum_answer=a+b

 

return

end


function과 subroutine의 사용법 및 차이점을 이제는 헷갈려하지 말자!