采用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小时内删除。
发表评论