如何定义Fortran77的子函数


前言

当一个程序超过几百行时,大型程序很难去Follow。Fortran 解决实际工程问题时候,通常有几万行程序。唯一去处理这样的大型程序的办法是使用模块化的方法,将大程序分成很多的独立的小程序,我们把这些独立的小程序叫做,subprograms。Fotran有两种子程序,一种叫做Functions, 另外一种叫做Subroutines

一、Functions

Fotran的function只会返回一个返回值。
Fortran77有很多内置的函数。

abs
min
max
sqrt
sin
cos
tan
atan
exp
log

通常情况下,一个函数都有一个type,上述内置函数的输入参数类型都是generic,意思是你可以输入任何类型的参数。但是,遗憾的是Fortran并不是一个真正的智能语言。所以你在使用函数的时候还是匹配你的函数所要求的参数类型。
通用的Fortran函数格式如下

type function name (list-of -variables)
declarations
statements
return
end
c2345678
	  real function r(m, t)
	  integer m
	  real t
	  
	  r = 0.1*t*(m**2+14*m+46)
	  if (r .LT. 0) r = 0.0

	  return
	  end

自定义的函数名称必须和返回值一样。比如上述定义的函数,r(m, t), r在函数中的名字也是r。其他与主函数不一样的地方在于:
自定义函数需要一个返回值的type,这个type出现在函数的定义位置。
函数结束的标志是return,而不是stop.

严格意义来说,Fortran不允许使用recursion, 但是有些编译器会支持的。

二、Subroutines

由于Fortran的function只会返回一个函数值。通常我们希望返回两个或者多个值。为了这个目标,我们采用subroutine来实现多个或者没有返回值的subprogram.子程序。
通用定义subroutine的语法是这样的

subroutine name(list-of-variabes)
declarations
statements
return
end

下面将展示一个subroutine, 用来交换两个数的值。

c2345678
	  subroutine swap(a, b)
	  integer a, b
c local variables
	  integer tmp
	  
	  tmp = a
	  a = b
	  b= tmp
	  
	  return
	  end


在subroutine的变量定义中,分成两个部分。一种是调用和被调用共有的变量,就是将括号里的变量重新定义一下。
然后是是属于subroutine的局部变量。

总结

本文简单介绍了,Fortran怎么实现定义子程序的方法。包括定义子函数和子线程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值