采用Fortran编程提取系统时间
文一猪
编程中我们往往需要提取系统时间,从而确定程序或子程序的运行时间。我想在这里上有几个目的,比如说要对程序进行优化,当然你得先优化比较费时的子程序,或者你要直接从实际计算上计算出程序的复杂度,简单说就是计算时间同计算量的函数关系。在这里给出关于采用Fortran95语言编写的提取系统时间程序。Example1是网上帖子里的程序,不过该程序采用的time程序似乎不是Fortran95的标准程序。在Example2给出的是自编的采用模块化编程调用cpu_time程序,使用F95的朋友可以很容易地将该程序嵌入到你们的程序中使用。
Mar. 14, 2013

例子1:
program TimeNow
  character*8 :: now
  integer    :: hh,mm,ss
  call time (now)    ! 读系统时间
  write(*,*) now      ! 写出时间字符串
  ! 用字符变量now作为内部文件,从中将时、分、秒作为整数读出
  read(now,"(I2,1x,I2,1x,I2)") hh,mm,ss  ! 字符转换为
  write(*,*) hh,mm,ss ! 写出时、分、秒的整数值
  stop
end program TimeNow
帖子:
www.programfan/club/showtxt.asp?id=70407
bbs.pfan/post-70559.html

例子2:
module get_time
public display_time
contains
    subroutine display_time()
    implicit none
    doubleprecision nowtime
    call cpu_time(nowtime)
    write(*,'(1x,a,1e10.3)') "Now Time is ", nowtime
    return
    end subroutine
end module
program test_get_time
use get_time
implicit doubleprecision (a-h, o-z), integer (i-n)
call display_time()
do i = 1,1000000
do j = 1,2000
    x = dlog(1.1d0)
enddo
enddo
call display_time()
stop "The end!"
end program

附录1:
第 2 章 Fortran 95 内函数
本章列出了 f95 编译器可识别的内函数名称。
2.1 标准 Fortran 95 的通用内函数
本节中介绍的 Fortran 95 通用内函数按其在 Fortran 95 标准中的功能进行分组。
所示参数是在采用关键字形式时可以用作参数关键字的名称,如 cmplx(Y=B, KIND=M, X=A) 中所示。
有关这些通用内过程的详细说明,请查阅 Fortran 95 标准。
2.1.1 参数存在查询函数
通用内函数名
说明
PRESENT
存在参数
2.1.2 数值函数
通用内函数名
说明
ABS (A)
绝对值
AIMAG (Z)
复数的虚部
AINT (A [, KIND])
整数截尾
ANINT (A [, KIND])
最近的整数
CEILING (A [, KIND])
大于或等于数值的最小整数
CMPLX (X [, Y, KIND])
转换为复数类型
CONJG (Z)
共轭复数
DBLE (A)
转换为双精度实数类型
DIM (X, Y)
正偏差
DPROD (X, Y)
双精度实数乘积
FLOOR (A [, KIND])
小于或等于数值的最大整数
INT (A [, KIND])
转换为整数类型
MAX (A1, A2 [, A3,...])
最大值
MIN (A1, A2 [, A3,...])
最小值
MOD (A, P)
余数函数
MODULO (A, P)
模数函数
NINT (A [, KIND])
最近的整数
REAL (A [, KIND])
转换为实数类型
SIGN (A, B)
符号传输
2.1.3 数学函数
通用内函数名
说明
ACOS (X)
反余弦
ASIN (X)
反正弦
ATAN (X)
反正切
ATAN2 (Y, X)
反正切
COS (X)
余弦
COSH (X)
双曲余弦
EXP (X)
指数
LOG (X)
自然对数
LOG10 (X)
常用对数(10 为基数)
SIN (X)
正弦
SINH (X)
双曲正弦
SQRT (X)
平方根
TAN (X)
正切
TANH (X)
双曲正切
2.1.4 字符函数
通用内函数名
说明
ACHAR (I)
按 ASCII 整理序列排列时给定位置的字符
ADJUSTL (STRING)
齐左调整
ADJUSTR (STRING)
齐右调整
CHAR (I [, KIND])
按处理器整理序列排列时给定位置的字符
IACHAR (C)
按 ASCII 整理序列排列时字符的位置
ICHAR (C)
按处理器整理序列排列时字符的位置
INDEX (STRING, SUBSTRING [, BACK])
子串的起始位置
LEN_TRIM (STRING)
merge函数长度不包含结尾的空白字符
LGE (STRING_A, STRING_B)
词法上大于或等于
LGT (STRING_A, STRING_B)
词法上大于
LLE (STRING_A, STRING_B)
词法上小于或等于
LLT (STRING_A, STRING_B)
词法上小于
REPEAT (STRING, NCOPIES)
重复并置
SCAN (STRING, SET [, BACK])
扫描字符串以查集中的某个字符
TRIM (STRING)
删除结尾的空白字符
VERIFY (STRING, SET [, BACK])
检验字符串中的字符集
2.1.5 字符查询函数
通用内函数名
说明
LEN (STRING)
字符实体的长度
2.1.6 种类函数
通用内函数名
说明
KIND (X)
种类类型参数值
SELECTED_INT_KIND (R)
指定范围的整数种类类型参数
SELECTED_REAL_KIND ([P, R])
指定精度和范围的实数种类类型参数值
2.1.7 逻辑函数
通用内函数名
说明
LOGICAL (L [, KIND])
在种类类型参数不相同的逻辑类型对象之间转换
2.1.8 数值查询函数
通用内函数名
说明
DIGITS (X)
模型的有效数字数
EPSILON (X)
与此相比几乎可以忽略的数值
HUGE (X)
模型中最大的数值
MAXEXPONENT (X)
模型的最大指数
MINEXPONENT (X)
模型的最小指数
PRECISION (X)
十进制精度
RADIX (X)
模型的基数
RANGE (X)
十进制指数范围
TINY (X)
模型中最小的正数
2.1.9 位查询函数
通用内函数名
说明
BIT_SIZE (I)
模型中的位数
2.1.10 位操作函数
通用内函数名
说明
BTEST (I, POS)
位测试
IAND (I, J)
逻辑 AND
IBCLR (I, POS)
清除位
IBITS (I, POS, LEN)
提取位
IBSET (I, POS)
设置位
IEOR (I, J)
互斥 OR
IOR (I, J)
包容 OR
ISHFT (I, SHIFT)
逻辑移位
ISHFTC (I, SHIFT [, SIZE])
循环移位
NOT (I)
逻辑补充
2.1.11 传送函数
通用内函数名
说明
TRANSFER (SOURCE, MOLD [, SIZE])
处理第一个参数,就好象它与第二个参数属于同一种类型
2.1.12 浮点处理函数
通用内函数名
说明
EXPONENT (X)
型号的指数部分
FRACTION (X)
数值的小数部分
NEAREST (X, S)
指定的方向最近的不同处理器
RRSPACING (X)
接近指定数值的型号相对间隔的倒数
SCALE (X, I)
实数乘以基数得出整数幂
SET_EXPONENT (X, I)
设置数值的指数部分
SPACING (X)
接近指定数值的型号的绝对间隔
2.1.13 向量和矩阵乘法函数
通用内函数名
说明
DOT_PRODUCT (VECTOR_A, VECTOR_B)
两个一级数组的点乘积
MATMUL (MATRIX_A, MATRIX_B)
矩阵乘法
2.1.14 约简数组函数
通用内函数名
说明
ALL (MASK [, DIM])
如果所有的值为 True 则为 True
ANY (MASK [, DIM])
如果任意值为 True 则为 True
COUNT (MASK [, DIM])
数组中 True 元素数
MAXVAL (ARRAY, DIM [, MASK])
或 MAXVAL (ARRAY [, MASK])
数组中的最大值
MINVAL (ARRAY, DIM [, MASK])
或 MINVAL (ARRAY [, MASK])
数组中的最小值
PRODUCT (ARRAY, DIM [, MASK])
或 PRODUCT (ARRAY [, MASK])
数组元素的乘积
SUM (ARRAY, DIM [, MASK])
或 SUM (ARRAY [, MASK])
数组元素的求和
2.1.15 数组查询函数
通用内函数名
说明
ALLOCATED (ARRAY)
数组分配状态
LBOUND (ARRAY [, DIM])
数组的维数下界
SHAPE (SOURCE)
数组或标量的形式
SIZE (ARRAY [, DIM])
数组中的元素总数
UBOUND (ARRAY [, DIM])
数组的维数上界
2.1.16 数组构造函数
通用内函数名
说明
MERGE (TSOURCE, FSOURCE, MASK)
在屏蔽下合并
PACK (ARRAY, MASK [, VECTOR])
在屏蔽下将数组压缩为一级数组
SPREAD (SOURCE, DIM, NCOPIES)
增加维数以复制数组
UNPACK (VECTOR, MASK, FIELD)
在屏蔽下将一级数组解压缩为数组
2.1.17 数组整形函数
通用内函数名
说明
RESHAPE (SOURCE, SHAPE[, PAD, ORDER])
数组整形
2.1.18 数组处理函数
通用内函数名
说明
CSHIFT (ARRAY, SHIFT [, DIM])
循环移位
EOSHIFT (ARRAY, SHIFT [, BOUNDARY, DIM]
结束移位
TRANSPOSE (MATRIX)
调换两级数组
2.1.19 数组位置函数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。